具有特殊字符的 C# 正则表达式边界



我想要一个找到"可归因"的正则表达式。 我尝试了@"bAttributableb"但 \b 边界不适用于特殊字符。

例如,它不会区分可归因和非归因。有没有办法为可归因而不是负数的正则表达式?

做一个负面的回头看?

(?<!-)bAttributableb

显然,这只检查-。如果要检查其他字符,请将它们放在负后视的字符类中:

(?<![-^])bAttributableb

或者,如果您只想不匹配Non-Attributable但确实匹配SomethingElse-Attributable,则Non-放在后面

(?<!Non-)bAttributableb

有几种方法可以像您一样解决问题,但这完全取决于真正的要求。有时有必要精确地确定在每个具体情况下需要什么"单词边界",因为单词边界b1) 上下文相关,2) 匹配字符串中您应该注意的特定位置:

  • 在字符串中的第一个字符之前,如果第一个字符是 字字符。
  • 在字符串中的最后一个字符之后,如果最后一个 字符是单词字符。
  • 在字符串中的两个字符之间, 其中一个是单词字符,另一个不是单词字符。

现在,您可以遵循以下几种方法:

  • 当你只关心通常用连字符连接的复合词时(类似于@Sweeper的答案):(?<!-)bAttributableb(?!-)
  • 仅匹配空格或字符串的开头/结尾:(?<!S)Attributable(?!S)注意:实际上,如果这是您想要的,您可以使用s.Split().Contains("Attributable")来不使用正则表达式
  • 仅匹配前面没有标点符号,并且后面没有字母/数字/下划线:(?<!p{P})Attributableb
  • 仅当前面没有标点符号某些特定符号(例如,您想匹配逗号和冒号之后的单词)时才匹配:(?<![^P{P},;])Attributableb.

最新更新