正则表达式:如何不匹配单词的最后一个字符?

Cal*_*ers 2 .net c# regex

我正在尝试创建一个与单词(仅 az)不匹配的正则表达式,如果单词:的末尾有 a但其他方式匹配它。然而,这个词在一个更大的正则表达式的中间,所以我(不认为)你可以使用否定的lookbehind和$元字符。

我尝试了这种消极的前瞻:

([a-z]+)(?!:)
Run Code Online (Sandbox Code Playgroud)

但是这个测试用例

example:
Run Code Online (Sandbox Code Playgroud)

只匹配

exampl
Run Code Online (Sandbox Code Playgroud)

而不是失败。

Von*_*onC 5

如果您使用的是负前瞻,则可以将其放在开头:

(?![a-z]*:)[a-z]+
Run Code Online (Sandbox Code Playgroud)

即:“匹配至少一个 az 字符,除非以下字符是 0 到 n 'az' 后跟一个 ':'”

这将支持更大的正则表达式:

 X(?![a-z]*:)[a-z]+Y
Run Code Online (Sandbox Code Playgroud)

将匹配以下字符串:

 Xeee Xrrr:Y XzzzY XfffZ
Run Code Online (Sandbox Code Playgroud)

只有'XzzzY'