删除所有跟随4个或更多字符的-es / -s / -e / -x后缀

时间:2018-06-27 16:41:48

标签: python regex

我正尝试使用正则表达式删除所有后缀至少为4个字符的所有单词后缀-es-s-e-x在Python中。

有一些所需输出的示例,(法文)

  • technologiqu es →technologiqu
  • pare s →pare (单词太小,因此它不会删除“ es”,只会删除“ s”)
  • bas→bas (单词太小,因此无法执行任何操作)
  • matériau x →materiau
  • sièg es →sieg
  • sieg e →sieg
  • feuilleté es →feuilleté
  • dos→dos

我尝试实现如下所示的方法,但是我发现它不是很有效。

def _stem_reg(word):
    pattern = "(\w{4,})(es$)|(\w{4,})(s$)|(\w{4,})(e$)|(\w{4,})(x$)"
    found = re.match(pattern, word)

    if found is not None:
        return next(group for group in found.groups() if group is not None)
    else:
        return word

2 个答案:

答案 0 :(得分:-1)

尝试一下:^(\w{4,}?)(?:es|s|e|x)$

word = "feuilletées"
output = re.sub(r"^(\w{4,}?)(?:es|s|e|x)$", r'\1', word)
  • (\w{4,}?)捕获组1将匹配4个或更多字母。
  • (?:es|s|e|x)非捕获组将匹配范围内的所有后缀(-es,-s,-e,-x)

答案 1 :(得分:-2)

假设

txt = "your input string"

您可以使用:

re.sub(r"\b([^\W\d_]{4,})(?:(?<=...[^e])s|(?<=^...e)s|es|e|x)\b", r'\1', txt, flags = re.U)

测试此正则表达式模式here