【问题标题】:Match exact word and not match if there is a special symbol before匹配精确词,如果前面有特殊符号则不匹配
【发布时间】:2018-06-26 12:05:36
【问题描述】:

我有一个简单的正则表达式,可以匹配字符串中的确切子字符串:

"\bXXX\b"

这很酷,除了 1 种情况。如果 XXX 之前有特殊符号,则它匹配子字符串:

This is ABC #XXX DEF

如何调整正则表达式使其与#XXX 不匹配?

【问题讨论】:

标签: c# regex


【解决方案1】:

如果您只想允许空格作为分隔符,我会选择

(^|(?<= ))XXX($|(?= ))

解释:

  • (^|(?&lt;= )):行首 (^) 或空格上的“正向后视” ((?&lt;= ))。
  • ($|(?= )):行尾 ($) 或空格上的“正向前瞻” ((?= ))。

lookbehind/lookahead 表达式确保空间本身不是匹配的一部分。

【讨论】:

  • 谢谢!很好的答案!
【解决方案2】:

最好的方法是使用经典的空白或空格边界。
不涉及交替并且更快。

(?&lt;!\S)XXX(?!\S)

这也将匹配字符串开头或结尾的 XXX。

另外,也可以把它变成一个空间边界

(?&lt;![^ ])XXX(?![^ ])

这也将匹配字符串开头或结尾的XXX,但强制
如果不是,则在任一侧或 另一侧 使用空格字符。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-30
    • 2021-09-28
    • 1970-01-01
    • 2023-04-09
    • 1970-01-01
    相关资源
    最近更新 更多