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

发布于 2024-08-05 03:22:22 字数 433 浏览 8 评论 0原文

我有以下正则表达式:

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

它与此匹配得很好:

1,'a':1,R

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

1,' ':1,R

为什么 . 不匹配它?空格不属于字符吗?我无法使用 \s 因为我不想匹配制表符和换行符。我也尝试过:

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

但这也不起作用(而且我没有启用 IgnorePatternWhitespace )。

I have the following regular expression:

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

It matches this just fine:

1,'a':1,R

However, if I replace a with a space, it fails:

1,' ':1,R

Why doesn't . match it? Is a space not classified as a character? I can't use \s because I don't want to match tabs and line breaks. I also tried:

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

But that doesn't work, either (and I don't have IgnorePatternWhitespace enabled).

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

凉墨 2024-08-12 03:22:22

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

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|'.')

这样它就可以匹配引号之间的多个字符。

I can't reproduce what you're seeing:

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"));
    }
}

prints "True".

Is it possible that you've got another character between the quotes as well? Some non-printing character? Where is the text coming from?

You could try changing it to:

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

so it could match more than one character between the quotes.

长途伴 2024-08-12 03:22:22

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

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

I haven't tried in .NET, but the dot is language and implementation specific. Try:

([0-9]+),'([.| ])':([0-9]+),(L|R|'.')
千と千尋 2024-08-12 03:22:22

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

Use \0x0020 which will match a single space character.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文