使用python的正则表达式匹配多组字符

时间:2019-04-18 13:37:00

标签: python regex

作为一些去词性规则的一部分,我试图形成一个正则表达式,以匹配以'ses','zes','xes','ches'或'shes'结尾的字符串,但遇到困难使字母分组正确。我认为以下方法会起作用...

re.fullmatch(r'.*[szx(ch)(sh)]es\b', infl)

但是我看到这将匹配'ces'或'hes词尾,而我只希望它匹配'ches'词尾(与(sh)分组相同)。我一定误会了如何正确地“或”分组在一起。每当我将括号放在一组组周围时,我都会匹配其中的所有字母,而不仅仅是字母组合。

如何重新构造fullmatch表达式才能正常工作?我一定会误会合并分组的工作方式,因此在这种情况下对此做一个简短的解释也会有所帮助。

顺便说一句...我只需要返回true / false。我对返回的值不感兴趣。

一些匹配的示例是:解雇,华尔兹,索引,分离,区分。

1 个答案:

答案 0 :(得分:3)

您的正则表达式即使在Java中也无法正常工作,因为字符类中不支持分组。 ()被视为[...]中的文字括号。

fullmatch需要完整的字符串匹配,如果您不关心开头是什么,只需使用re.search并在模式末尾定位

使用

re.search(r'(?:[zx]|ch|sh?)es$', s)

请参见regex demoRegulex graph

enter image description here

详细信息

  • (?:[zx]|ch|sh?)-与non-capturing group匹配的任何一个
    • [zx]-zx
    • |-或
    • ch-ch字符序列
    • |-或
    • sh?-ssh
  • es-es子字符串
  • $-字符串的结尾。