gpt4 book ai didi

python - 第三人称动词的正则表达式

转载 作者:太空狗 更新时间:2023-10-30 00:09:37 24 4
gpt4 key购买 nike

我正在尝试创建一个正则表达式来匹配使用以下规则创建的动词的第三人称形式:

If the verb ends in e not preceded by i,o,s,x,z,ch,sh, add s.

所以我正在寻找一个正则表达式来匹配一个由一些字母组​​成的单词,然后是 not i,o,s,x,z,ch,sh,然后是“es”。我试过这个:

\b\w*[^iosxz(sh)(ch)]es\b

根据 regex101,它匹配“喜欢”、“讨厌”等。但是,它不匹配“沐浴”,为什么不匹配?

最佳答案

你可以使用

\b(?=\w*(?<![iosxz])(?<![cs]h)es\b)\w*

参见 regex demo

自从 Python re不支持 lookbehind 中的可变长度替代项,您需要在此处将条件拆分为两个 lookbehinds。

图案细节:

  • \b - 前导词边界
  • (?=\w*(?<![iosxz])(?<![cs]h)es\b) - 一个积极的前瞻需要一系列的:
    • \w* - 0+ 个单词字符
    • (?<![iosxz]) - 不能有 i , o , s , x , z当前位置之前的字符和...
    • (?<![cs]h) - 没有chsh就在当前位置之前...
    • es - 其次是 es ...
    • \b - 在词尾
  • \w* - 零个或多个(也许 + 在这里更好地匹配 1 个或多个)单词字符。

参见 Python demo :

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))

关于python - 第三人称动词的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40572515/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com