Python 正则表达式后缀匹配

1 投票
5 回答
9120 浏览
提问于 2025-04-17 16:52

我想知道如何检查一个单词是否以常见的后缀(比如ize、fy、ly、able等等)结尾,并把这些后缀去掉。我知道可以用循环的方法,比如用word.endswith('ize')来检查,但我觉得用正则表达式的方法会更简洁。我试过用正向前瞻和结尾标记$,但不知道为什么没有成功:

pat='(?=ate|ize|ify|able)$'
word='terrorize'
re.findall(pat,word)

5 个回答

2

前瞻是一个锚点模式,就像 ^$ 这些符号一样,它们用来匹配特定的位置,但本身并不是一个实际的匹配。

想要 匹配这些后缀,但要在单词的结尾,所以要使用单词边界锚点 \b

r'(ate|ize|ify|able)\b'

然后使用 re.sub() 来替换这些内容:

re.sub(r'(ate|ize|ify|able)\b', '', word)

这样做效果很好:

>>> word='terrorize'
>>> re.sub(r'(ate|ize|ify|able)\b', '', word)
'terror'
5

一个鲜为人知的事实是:endswith这个函数可以接受一个可能性列表,也就是一个元组:

if word.endswith(('ate','ize','ify','able')):
    #...

不过,它并不会告诉你找到的是哪个字符串,所以在去掉后缀的时候就没什么帮助了。

2

你想要找的其实是 (?:)
看看这个:

re.sub(r"(?:ate|ize|ify|able)$", "", "terrorize")

可以看看这个网站 Regex
里面有很多有用的正则表达式技巧。希望你喜欢。

顺便说一下,Python 的库本身就是一个很棒的教程。
我经常用 help() 来查资料 :)

撰写回答