为什么这个正则表达式不匹配空格?

时间:2009-09-09 22:16:25

标签: .net regex whitespace spaces

我有以下正则表达式:

([0-9]+),'(.)':([0-9]+),(L|R|'.')

它匹配得很好:

1,'a':1,R

但是,如果我用空格替换 a ,则会失败:

1,' ':1,R

为何不匹配?没有被归类为角色的空间?我无法使用 \ s ,因为我不想匹配标签和换行符。我也尝试过:

([0-9]+),'(.| )':([0-9]+),(L|R|'.')

但这也行不通(我没有IgnorePatternWhitespace启用)。

3 个答案:

答案 0 :(得分:1)

我无法重现您所看到的内容:

using System;
using System.Text.RegularExpressions;

class Test
{
    static void Main()
    {
        Regex regex = new Regex("([0-9]+),'(.)':([0-9]+),(L|R|'.')");
        Console.WriteLine(regex.IsMatch("1,' ':1,R"));
    }
}

打印“True”。

你是否有可能在引号之间有另一个字符?有些非印刷字符?文字来自哪里?

您可以尝试将其更改为:

([0-9]+),'([^']+)':([0-9]+),(L|R|'.')

所以它可以匹配引号之间的多个字符。

答案 1 :(得分:0)

我没有在.NET中尝试,但点是语言和实现特定的。尝试:

([0-9]+),'([.| ])':([0-9]+),(L|R|'.')

答案 2 :(得分:0)

使用 \ 0x0020 ,它将匹配单个空格字符。