为什么某些正则表达式匹配项不能一一替换?

问题描述

我正在使用notepad ++和akelpad进行文本编辑。

示例文字hello,this is a test.are you ready?

搜索(?<=[a-z,.?! ])([,.?!])(?=[a-z])

替换为:\1

替换结果:hello,this is a test. are you ready?

只有当我全部替换完之后,它才能按预期工作,但是如果单击“替换”按钮,则什么也没有发生。就像我单击查找一样,它导航到下一个匹配项。

refer to this screenshot

它同时在npp和akelpad中发生。为什么会发生这种情况,我应该尝试什么解决方案?

谢谢!

解决方法

由于正则表达式没问题,因此看起来像个错误。

通过尽可能多地捕获,可以解决Notepad ++和其他类似编辑器中的所有类似问题。

在您的情况下,您可以将后面的外观转换为消费模式:

([a-z,.?! ][,.?!])(?=[a-zA-Z])
^^^^^^^^^^^^^^^^^^   

现在,当用\1 替换时,您将获得所需的行为,即在匹配值后将添加一个空格。

演示:

enter image description here

,

如果这只是你想要的,试试这个......

查找内容:[,.]
替换为:$0