【问题标题】:How to replace the last string of a matched word in regex?如何替换正则表达式中匹配单词的最后一个字符串?
【发布时间】:2018-04-06 14:14:13
【问题描述】:

我想使用正则表达式将所有单词末尾有 e 的单词中的字母 a 替换为 EI,然后需要从单词中删除最后一个 e。 例如:

  • date 将变为deit

  • cat 将保持为cat

  • jane 将变为jein

我写了一个正则表达式,它用 EI 替换末尾有 e 的单词中的 a,但我无法删除最后一个 e

我的正则表达式:s/a(?=.*e\b)/EI/g

【问题讨论】:

  • 您的语言是什么?不同的语言支持不同的正则表达式功能
  • @JorgeCampos 它在我看来像 Perl,但这是一个一般的正则表达式问题,不一定依赖于一种语言。

标签: regex


【解决方案1】:

您当前正则表达式的问题:

s/a(?=.*e\b)/EI/g.

.* 是不是 贪婪,并且会跨词匹配。例如,您的模式将在banana edible 中定位a,因为.* 会检测到e 换句话说。相反,试试这个查找和替换:

查找:

a(?=[A-Za-z]*e\b)

替换:

ei

这是一个演示,显示该模式正确识别 a 字母以替换以 e 结尾的单词:

Demo

【讨论】:

  • 谢谢蒂姆,但它仍然没有删除单词的最后一个 e
  • 是的,我想要删除最后一个字符串的……总之得到了答案……谢谢
【解决方案2】:

查找并替换以下内容

查找: ([a-zA-Z]*)(a)([a-zA-Z]*)(e\b)

([a-zA-Z]*) 确保在a 首次出现之前出现零个或多个字母

(a) 确保存在a

([a-zA-Z]*) 确保在a 首次出现之前出现零个或多个字母

(e\b) 确保单词以e 结尾

替换: $1ei$3

$1 - 第一个捕获组

而不是第二个捕获组(a) 替换为ei

$3 - 第三个捕获组

第四个捕获组被忽略,所以它在最后删除了e

Demo

【讨论】:

  • 非常感谢 Abdul.. 完美运行,这就是我想要的。您能解释一下您使用的逻辑吗? :)
  • @Safa 添加了正则表达式的解释
猜你喜欢
  • 1970-01-01
  • 2011-09-02
  • 2014-04-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-08
  • 1970-01-01
  • 2015-11-30
相关资源
最近更新 更多