我希望找到一个可以找到" Attributable"的正则表达式。
我试过了@"\bAttributable\b"
,但\ b边界不适用于特殊字符。
例如,它不会区分Attributable和Non-Attributable。有没有办法让Regex用于归属,而不是它的否定?
答案 0 :(得分:2)
做一个负面的后卫?
(?<!-)\bAttributable\b
显然这仅检查-
s。如果要检查其他字符,请将它们放在负面后台中的字符类中:
(?<![-^])\bAttributable\b
或者,如果您只是想与Non-Attributable
不匹配但匹配SomethingElse-Attributable
,那么请将Non-
放在后面:
(?<!Non-)\bAttributable\b
答案 1 :(得分:1)
有几种方法可以解决您遇到的问题,但这完全取决于实际需求。有时需要精确确定每个具体案例中需要的“单词边界”,因为\b
word boundary是1)依赖于上下文,2)匹配字符串中您应该注意的特定位置:
- 在字符串中的第一个字符之前,如果第一个字符是a 字符。
- 字符串中的最后一个字符后,如果是最后一个字符 character是一个单词字符。
- 字符串中的两个字符之间, 其中一个是单词字符而另一个不是单词字符。
现在,您可以遵循以下几种方法:
(?<!-)\bAttributable\b(?!-)
(?<!\S)Attributable(?!\S)
。 注意:实际上,如果它是您想要的,您可以使用s.Split().Contains("Attributable")
(?<!\p{P})Attributable\b
(?<![^\P{P},;])Attributable\b
。