我正在尝试创建一个正则表达式,该正则表达式匹配使用以下规则创建的动词的第三人称形式:
如果动词以e结尾,而不是i,o,s,x,z,ch,sh,则添加s.
所以我正在寻找匹配由一些字母组成的单词的正则表达式,然后不是 i,o,s,x,z,ch,sh,然后是"es".我试过这个:
\b\w*[^iosxz(sh)(ch)]es\b
Run Code Online (Sandbox Code Playgroud)
根据regex101它匹配"喜欢","讨厌"等.然而,它不匹配"沐浴",为什么不呢?
您可以使用
\b(?=\w*(?<![iosxz])(?<![cs]h)es\b)\w*
Run Code Online (Sandbox Code Playgroud)
请参阅正则表达式演示
由于Pythonre不支持lookbehind中的可变长度替代方案,因此您需要在此处将条件拆分为两个lookbehind。
图案详情:
\b- 前导词边界(?=\w*(?<![iosxz])(?<![cs]h)es\b)- 积极的前瞻需要一系列:
\w* - 0+ 个单词字符(?<![iosxz])- 当前位置之前不能有i, o , s, x,z字符并且...(?<![cs]h)- 没有ch或sh就在当前位置之前...es- 随后是es...\b- 在单词的末尾\w*- 零个或多个(也许+这里匹配 1 个或多个)单词字符更好。请参阅Python 演示:
import re
r = re.compile(r'\b(?=\w*(?<![iosxz])(?<![cs]h)es\b)\w*')
s = 'it matches "likes", "hates" etc. However, it does not match "bathes", why doesn\'t it?'
print(re.findall(r, s))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
132 次 |
| 最近记录: |