我有一个像“AAA 101 B202 C 303”的字符串,我想摆脱字符和数字之间的空格,如果有的话。 所以操作后,字符串应该像“AAA101 B202 C303”。但我不确定正则表达式是否可以做到这一点?C#中的模式匹配问题#
任何帮助?提前致谢。
我有一个像“AAA 101 B202 C 303”的字符串,我想摆脱字符和数字之间的空格,如果有的话。 所以操作后,字符串应该像“AAA101 B202 C303”。但我不确定正则表达式是否可以做到这一点?C#中的模式匹配问题#
任何帮助?提前致谢。
是的,你可以用正则表达式来做到这一点。下面是一个简短但完整的例子:
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
表达可以收紧取代,但上面的应该为你的榜样输入字符串工作。
它所做的是声明一个包含字母(第一组parseheses),然后是可选空间(\ 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();
为什么使空间可选?毕竟,这就是这一切。 – 2010-07-07 16:57:52