作为一些去词性规则的一部分,我试图形成一个正则表达式,以匹配以'ses','zes','xes','ches'或'shes'结尾的字符串,但遇到困难使字母分组正确。我认为以下方法会起作用...
re.fullmatch(r'.*[szx(ch)(sh)]es\b', infl)
但是我看到这将匹配'ces'或'hes词尾,而我只希望它匹配'ches'词尾(与(sh)分组相同)。我一定误会了如何正确地“或”分组在一起。每当我将括号放在一组组周围时,我都会匹配其中的所有字母,而不仅仅是字母组合。
如何重新构造fullmatch
表达式才能正常工作?我一定会误会合并分组的工作方式,因此在这种情况下对此做一个简短的解释也会有所帮助。
顺便说一句...我只需要返回true / false。我对返回的值不感兴趣。
一些匹配的示例是:解雇,华尔兹,索引,分离,区分。
答案 0 :(得分:3)
您的正则表达式即使在Java中也无法正常工作,因为字符类中不支持分组。 (
和)
被视为[...]
中的文字括号。
fullmatch
需要完整的字符串匹配,如果您不关心开头是什么,只需使用re.search
并在模式末尾定位
使用
re.search(r'(?:[zx]|ch|sh?)es$', s)
详细信息
(?:[zx]|ch|sh?)
-与non-capturing group匹配的任何一个
[zx]
-z
或x
|
-或ch
-ch
字符序列|
-或sh?
-s
或sh
es
-es
子字符串$
-字符串的结尾。