正则表达式替换^(。*)\ r \ n意外行为

时间:2014-11-26 08:30:10

标签: regex notepad++

我无法弄清楚为什么正则表达式在替换时的行为方式。请考虑以下列表:

ABC
CBA
DDD
JKL

我想替换每个条目,以便得到以下结果:

ABC,CBA,DDD,JKL

我使用Notepad ++使用以下内容进行匹配:

(.*)\r\n

在替换中使用了这个:

($1),

这导致了期望的结果。

然而我最初的想法是我可以使用这个匹配:

^(.*)\r\n

但是:这导致了

ABC,CBA
DDD,JKL

我无法弄清楚为什么它不会那样工作并导致那种奇怪的结果。我错过了什么? 为什么^(。*)\ r \ n错误?

4 个答案:

答案 0 :(得分:2)

记事本尝试匹配第一行的正则表达式。它找到一个匹配并根据需要替换。你的新州是:

ABC,CBA 
DDD 
JKL

现在查看下一行,现在是DDD并在那里执行替换。 现在是:

ABC,CBA 
DDD,JKL

因此,你的替换正在移动线条的事实可能会混淆你的编辑器的正则表达式逻辑。

如果你现在再次执行相同的正则表达式替换,这将导致你想要的结果。

答案 1 :(得分:1)

您不能只使用\s+并通过,替换它。您根本不需要捕获。

参见演示。

http://regex101.com/r/oE6jJ1/26

答案 2 :(得分:0)

尝试使用以下正则表达式:

[\r\n]+$

并将其替换为,

答案 3 :(得分:0)

如下所示更改正则表达式。因为行结尾可能只有\n\r\n个字符。

(.*)[\r\n]+

使用$1,\1,

替换匹配的字符串

DEMO