如何用正则匹配一个不以X开头但以Y结尾的单词

2 投票
1 回答
2628 浏览
提问于 2025-04-16 00:15

示例:

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)

撰写回答