如何用正则匹配一个不以X开头但以Y结尾的单词
示例:
X=This
Y=That
不匹配的情况:
ThisWordShouldNotMatchThat
ThisWordShouldNotMatch
WordShouldNotMatch
匹配的情况:
AWordShouldMatchThat
我试过 (?<!...)
,但感觉不太简单 :)
1 个回答
14
^(?!This).*That$
作为一个自由空格的正则表达式:
^ # Start of string
(?!This) # Assert that "This" can't be matched here
.* # Match the rest of the string
That # making sure we match "That"
$ # right at the end of the string
这个表达式会匹配一个符合你条件的单词,但前提是这个单词是正则表达式唯一的输入。如果你想在一串其他单词中找到这个单词,那就需要使用其他方法。
\b(?!This)\w*That\b
\b
是单词边界的标记,所以它会在单词的开始和结束处进行匹配。\w
的意思是“字母数字字符”。如果你还想把非字母数字字符也算作你“单词”的一部分,那就用 \S
,这个会匹配任何不是空格的东西。
在Python中,你可以这样写 words = re.findall(r"\b(?!This)\w*That\b", text)
。