Python 正则表达式后缀匹配
我想知道如何检查一个单词是否以常见的后缀(比如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() 来查资料 :)