【问题标题】:Why is this word boundary regex not matching [duplicate]为什么这个词边界正则表达式不匹配[重复]
【发布时间】:2017-06-04 20:21:34
【问题描述】:

这是示例文本:

第1项:1.操作方法。

这匹配1.:

\b1\.

但这确实匹配1.

\b1\.\b

我需要对1. 进行完全匹配 我正在测试它here

【问题讨论】:

  • 根本不清楚您为什么需要\b - 只需1\. 已经返回所需的完全匹配。
  • 我不想匹配像1.2这样的东西
  • .[ ] 之间的边界(句点后的空格)不是单词边界,因此您指定的正则表达式行为正确。

标签: c# regex


【解决方案1】:

. 不是单词字符。 \b 正在检查 word 边界,即单词和不被视为单词一部分的字符之间的边界。因此,您不能指望. 在“单词”1. 内,因为这两个字符不构成单词。


Quick reference document\b 描述为:

匹配必须出现在 \w(字母数字)和 \W(非字母数字)字符之间的边界上。

\w被描述为:

匹配任何单词字符。

如果您检查Word character 是什么,您会发现它包含Unicode 类Ll [字母,小写]Lu [字母,大写]; Lt [字母,大写]; Lo [字母,其他]; Lm [字母,修饰符]; Mn [标记,非间距]; Nd [数字,十进制数字]Pc [标点符号,连接符].

但是. 有Unicode 类Po [Punctuation, Other],上面没有列出。

因此,如果您希望 \b 匹配 1. 中的单词边界,则它正好在 1. 之间。这回答了您的问题为什么

注意: .NET 正则表达式最好在专用于它们的测试站点上进行测试,例如 Regex Storm。如果您使用 PCRE 正则表达式风格测试您的正则表达式(例如在您链接的网站上),您可以从 .NET 获得不同的结果。

【讨论】:

    猜你喜欢
    • 2022-07-06
    • 2019-05-17
    • 1970-01-01
    • 2020-01-25
    • 2018-08-24
    • 1970-01-01
    • 2018-06-02
    • 1970-01-01
    • 2023-01-02
    相关资源
    最近更新 更多