如果单词以给定的后缀结尾,请替换所有出现的字母

时间:2018-09-04 16:12:51

标签: regex

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

当单词以特定的后缀结尾时,我需要替换单词中所有出现的特定字符,然后另外删除其后缀。为了保持一致性,我将使用类似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

1 个答案:

答案 0 :(得分:1)

我不确定您是否可以仅使用正则表达式来满足所有要求。但是,如果您使用.z.ey,它将匹配所有单词,并在单词和后缀中至少包含一个(?:(\w*?a\w*))*(?=s\b)。但是替换可以在编程语言中完成。 因此,您可以在Python中使用a,然后: re.findall(r"\b(\w*?a\w*)(?=s\b)",text)

哪位会给您:[word.replace("a","e") for word in re.findall(r"\b(\w*?a\w*)(?=s\b)",x)]