【问题标题】:Regular expression: find spaces (tabs/space), but not newlines正则表达式:查找空格(制表符/空格),但不查找换行符
【发布时间】:2011-04-04 17:31:14
【问题描述】:

我怎样才能有一个正则表达式来测试空格或制表符,而不是换行符?

我尝试了\s,但我发现它也可以测试换行符。

我使用C# (.NET) 和WPF,但这应该没关系。

【问题讨论】:

  • 这可能很重要。 .NET 正则表达式函数具有多行选项。没有一个答案能解决这个问题(即使它的默认值可能就足够了)。

标签: regex


【解决方案1】:

使用字符类:[ \t]

【讨论】:

  • 找出我的问题。另请参阅 stackoverflow.com/a/25956935/292060 以获取仅限 perl 的 \h 字符类,但它确实显示还有许多其他空白字符,以防您需要将它们添加到此处的列表中。
  • \t前面为什么要加空格?
  • @Ooker 捕获文字空间
  • 这与其他类型的空格不匹配,正如其他答案所提到的那样。
  • 为什么在 \t 之前有一个空格?
【解决方案2】:

试试这个字符集:

[ \t]

这仅匹配空格或制表符。

【讨论】:

    【解决方案3】:

    作为Eiríkr Útlendi noted,可接受的解决方案仅考虑两个空白字符:水平制表符 (U+0009) 和分隔空格 (U+0020)。它不考虑其他空白字符,例如不间断空格(恰好在我要处理的文本中)。

    更完整的空白字符列表包含在on Wikipedia 中,并且在linked Perl answer 中也有引用。可以使用 character class subtraction 构建一个简单的 C# 解决方案来解释这些其他字符:

    [\s-[\r\n]]
    

    或者,包括 Eiríkr Útlendi 的解决方案,你会得到

    [\s\u3000-[\r\n]]
    

    【讨论】:

      【解决方案4】:

      注意:对于处理CJK 文本(中文、日文和韩文)的人,不包括双字节空格(Unicode \u3000)在\s 中,对于我迄今为止尝试过的任何实现(Perl、.NET、PCRE 和 Python)。您需要先规范化您的字符串(例如将所有\u3000 替换为\u0020),或者您必须使用包含此代码点的字符集以及您使用的任何其他空格定位,例如[ \t\u3000]

      如果您使用 Perl 或 PCRE,您可以选择使用 \h 简写 水平空白,它似乎包括单字节空间、双字节空间和选项卡等。详情请参阅Match whitespace but not newlines (Perl) 问题。

      但是,据我所知,这个 \h 简写还没有为 .NET 和 C# 实现。

      【讨论】:

      • 好点。 Java 的 \h(在 Java 8 中引入)确实包含 \u3000,但 \s 不包含,除非您设置 UNICODE_CHARACTER_CLASS 模式(在 Java 7 中引入)。
      【解决方案5】:

      如果你想替换 空格,下面的代码在 C# 中对我有用。

      Regex.Replace(Line, "\\\s", "");
      

      标签页

      Regex.Replace(Line, "\\\s\\\s", "");
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-02-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-11-11
        相关资源
        最近更新 更多