Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# C语言中的模式匹配问题#_C#_Regex - Fatal编程技术网

C# C语言中的模式匹配问题#

C# C语言中的模式匹配问题#,c#,regex,C#,Regex,我有一个类似“AAA 101 B202 C 303”的字符串,如果有,我想去掉字符和数字之间的空格。 因此,操作后,字符串应类似于“AAA101 B202 C303”。但我不确定regex能否做到这一点 有什么帮助吗?提前谢谢。你可以做以下事情 ([A-Z]+)\s?(\d+) 并替换为 $1$2 表达式可以收紧,但上面的内容应该适用于示例输入字符串 它所做的是声明一个包含字母的组(第一组副词),然后是一个可选空格(\s?),然后是一组数字(\d+)。这些组可以通过引用它们的索引在替换中使用

我有一个类似“AAA 101 B202 C 303”的字符串,如果有,我想去掉字符和数字之间的空格。 因此,操作后,字符串应类似于“AAA101 B202 C303”。但我不确定regex能否做到这一点


有什么帮助吗?提前谢谢。

你可以做以下事情

([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();