我有一个字符串,如“AAA 101 B202 C 303”,我想要去掉字符和数字之间的空格。因此,在操作后,该字符串应该像“AAA101 B202 C303”。但我不确定是否可以使用正则表达式来实现这个目标?
有帮助吗?提前致谢。
有帮助吗?提前致谢。
是的,你可以使用正则表达式来实现这个功能。以下是一个简短但完整的示例:
using System;
using System.Text.RegularExpressions;
class Test
{
static void Main()
{
string text = "A 101 B202 C 303 ";
string output = Regex.Replace(text, @"(\p{L}) (\d)", @"$1$2");
Console.WriteLine(output); // Prints A101 B202 C303
}
}
(如果您要经常这样做,您可能需要为该模式编译一个正则表达式。)
\p{L}
匹配任何Unicode字母-您可能希望更加严格。
您可以这样做
([A-Z]+)\s?(\d+)
翻译成中文:
并替换为
$1$2
表达式可以更加简洁,但是上面的代码应该适用于你的示例输入字符串。
它声明了一个包含字母的组(第一组括号),然后是一个可选的空格(\s?),然后是一组数字(\d+)。这些组可以通过引用它们的索引在替换中使用,所以当你想要去掉空格时,只需用$1$2进行替换即可。
虽然不如正则表达式简洁,但像这样的C#代码非常直观且运行速度非常快:
StringBuilder sb = new StringBuilder();
for(int i=0; i<s.Length; i++)
{
// exclude spaces preceeded by a letter and succeeded by a number
if(!(s[i] == ' '
&& i-1 >= 0 && IsLetter(s[i-1])
&& i+1 < s.Length && IsNumber(s[i+1])))
{
sb.Append(s[i]);
}
}
return sb.ToString();