首页 > 解决方案 > 如果单词以给定的后缀结尾,则替换所有出现的字母

问题描述

这个问题没有考虑到特定的正则表达式引擎。

我需要,当单词以特定后缀结尾时,替换单词中所有出现的特定字符,然后另外删除其后缀。为了保持一致性,我将使用类似 vim 的 regex-replace 语法。这是我到目前为止所拥有的:

s/a(\w*)s\b/e\1/g

这会在任何以“s”结尾的单词中找到“a”字符的出现并将其替换为“e”,同时额外删除“s”但在无法匹配和替换多个出现的意义上不重叠同一个词中的一个字符。

解决方案必须匹配并替换一个或多个字符,同时删除后缀。

一些示例行为:

cars -> cer
creators -> creetor
bowling -> bowling
bowling balls -> bowling bell
castration -> castration
castrations -> cestretion

标签: regex

解决方案


我不确定您是否可以仅使用正则表达式来满足您的所有要求。但是,如果您使用(?:(\w*?a\w*))*(?=s\b)它将匹配所有单词,其中至少有一个a单词和后缀。但是替换可以在编程语言中完成。所以你可以re.findall(r"\b(\w*?a\w*)(?=s\b)",text)在 Python 中使用,然后: [word.replace("a","e") for word in re.findall(r"\b(\w*?a\w*)(?=s\b)",x)]

这会给你:['cer', 'creetor', 'bell', 'cestretion']


推荐阅读