我想要一个找到"可归因"的正则表达式。 我尝试了@"bAttributableb"
但 \b 边界不适用于特殊字符。
例如,它不会区分可归因和非归因。有没有办法为可归因而不是负数的正则表达式?
做一个负面的回头看?
(?<!-)bAttributableb
显然,这只检查-
。如果要检查其他字符,请将它们放在负后视的字符类中:
(?<![-^])bAttributableb
或者,如果您只想不匹配Non-Attributable
但确实匹配SomethingElse-Attributable
,则Non-
放在后面
(?<!Non-)bAttributableb
有几种方法可以像您一样解决问题,但这完全取决于真正的要求。有时有必要精确地确定在每个具体情况下需要什么"单词边界",因为单词边界b
1) 上下文相关,2) 匹配字符串中您应该注意的特定位置:
- 在字符串中的第一个字符之前,如果第一个字符是 字字符。
- 在字符串中的最后一个字符之后,如果最后一个 字符是单词字符。
- 在字符串中的两个字符之间, 其中一个是单词字符,另一个不是单词字符。
现在,您可以遵循以下几种方法:
- 当你只关心通常用连字符连接的复合词时(类似于@Sweeper的答案):
(?<!-)bAttributableb(?!-)
- 仅匹配空格或字符串的开头/结尾:
(?<!S)Attributable(?!S)
。注意:实际上,如果这是您想要的,您可以使用s.Split().Contains("Attributable")
来不使用正则表达式 - 仅匹配前面没有标点符号,并且后面没有字母/数字/下划线:
(?<!p{P})Attributableb
- 仅当前面没有标点符号但某些特定符号(例如,您想匹配逗号和冒号之后的单词)时才匹配:
(?<![^P{P},;])Attributableb
.