我有一个像“AAA 101 B202 C 303”这样的字符串,如果有的话,我想摆脱字符和数字之间的空格。 所以操作后,字符串应该像“AAA101 B202 C303”。但我不确定正则表达式是否可以做到这一点?
有任何帮助吗?提前谢谢。
答案 0 :(得分:8)
是的,您可以使用正则表达式执行此操作。这是一个简短而完整的例子:
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字母 - 您可能希望限制更多。
答案 1 :(得分:1)
您可以执行类似
的操作([A-Z]+)\s?(\d+)
并替换为
$1$2
表达式可以收紧,但上面的内容应该适用于您的示例输入字符串。
它的作用是声明一个包含字母(第一组parantheses)的组,然后是一个可选空格(\ s?),然后是一组数字(\ d +)。这些组可以通过引用它们的索引来替换它们,所以当你想要摆脱空间时,只需用$ 1 $ 2替换。
答案 2 :(得分:0)
虽然不像Regex那样简洁,但像这样的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();
答案 3 :(得分:0)