C# C语言中的模式匹配问题#
我有一个类似“AAA 101 B202 C 303”的字符串,如果有,我想去掉字符和数字之间的空格。 因此,操作后,字符串应类似于“AAA101 B202 C303”。但我不确定regex能否做到这一点C# C语言中的模式匹配问题#,c#,regex,C#,Regex,我有一个类似“AAA 101 B202 C 303”的字符串,如果有,我想去掉字符和数字之间的空格。 因此,操作后,字符串应类似于“AAA101 B202 C303”。但我不确定regex能否做到这一点 有什么帮助吗?提前谢谢。你可以做以下事情 ([A-Z]+)\s?(\d+) 并替换为 $1$2 表达式可以收紧,但上面的内容应该适用于示例输入字符串 它所做的是声明一个包含字母的组(第一组副词),然后是一个可选空格(\s?),然后是一组数字(\d+)。这些组可以通过引用它们的索引在替换中使用
有什么帮助吗?提前谢谢。你可以做以下事情
([A-Z]+)\s?(\d+)
并替换为
$1$2
表达式可以收紧,但上面的内容应该适用于示例输入字符串
它所做的是声明一个包含字母的组(第一组副词),然后是一个可选空格(\s?),然后是一组数字(\d+)。这些组可以通过引用它们的索引在替换中使用,因此当您想去掉空间时,只需用$1$2替换即可。是的,您可以使用正则表达式来完成此操作。下面是一个简短但完整的示例:
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字母-您可能需要更严格的限制。虽然不像正则表达式那样简洁,但类似这样的代码相当简单,运行速度非常快:
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();
StringBuilder sb=新建StringBuilder();
对于(int i=0;i=0&&s[i-1])
&&i+1
只是为了好玩(因为编程的行为有时是/应该是有趣的):o)我在使用:
为什么要选择空间?毕竟,这就是一切。
var result = text.Aggregate(
string.Empty,
(acc, c) => char.IsLetter(acc.LastOrDefault()) && Char.IsDigit(c) ?
acc + c.ToString() : acc + (char.IsWhiteSpace(c) && char.IsLetter(acc.LastOrDefault()) ?
string.Empty : c.ToString())).TrimEnd();