正则表达式匹配除给定列表之外的所有单词

Joh*_*ohn 18 .net c# regex

我正在尝试编写一个替换正则表达式来包围引号中的所有单词,但单词AND,OR和NOT除外.

我已经尝试了以下表达式的匹配部分:

(?i)(?<word>[a-z0-9]+)(?<!and|not|or)
Run Code Online (Sandbox Code Playgroud)

(?i)(?<word>[a-z0-9]+)(?!and|not|or)
Run Code Online (Sandbox Code Playgroud)

但都没有工作.替换表达式很简单,目前包含所有单词.

"${word}"
Run Code Online (Sandbox Code Playgroud)

所以

这和这不是那个

"这个"和"这个"不是"那个"

Tom*_*lak 14

这有点脏,但它有效:

(?<!\b(?:and| or|not))\b(?!(?:and|or|not)\b)
Run Code Online (Sandbox Code Playgroud)

用简单的英语,这匹配任何不在前面的单词边界,而不是"and","or"或"not".它只匹配整个单词,例如单词"sand"之后的位置不会是匹配,因为它前面是"and".

零宽度后视断言中"或"前面的空间对于使其成为固定长度的后视是必要的.如果这已经解决了您的问题,请尝试

编辑:应用于字符串"除了单词AND,OR和NOT." 作为单引号的全局替换,它返回:

'except' 'the' 'words' AND, OR and NOT.
Run Code Online (Sandbox Code Playgroud)


Jan*_*rts 5

约翰,

你问题中的正则表达式几乎是正确的.唯一的问题是你将前瞻放在正则表达式的末尾而不是开头.此外,您需要添加单词边界以强制正则表达式匹配整个单词.否则,它将匹配"和"中的"nd","或"等中的"r",因为"nd"和"r"不在您的负向前瞻中.

(我)(?!和|不能|或)\ B(?[A-Z0-9] +)\ b