使用正则表达式在Notepad ++和Vim中进行批量替换

Mik*_*ike 31 regex vim notepad++

所以我有一个大文本文件,如下所示:

<option value value='1' >A
<option value value='2' >B
<option value value='3' >C
<option value value='4' >D
Run Code Online (Sandbox Code Playgroud)

这是几百行,我真的不想手动完成.我正在尝试使用的表达式是:

<option value='.{1,}' >
Run Code Online (Sandbox Code Playgroud)

当我通过几个在线正则表达式测试程序运行它时,它正在按预期工作.我基本上想要删除A,B,C等之前的所有内容.问题是当我尝试在Vim和Notepad ++中使用该表达式时,它似乎找不到任何东西.

Gle*_*nnS 63

在Notepad ++中,您不需要使用正则表达式.

按住alt可以同时选择跨多行的文本矩形.选择要删除的块,然后按删除.


小智 30

在Notepad ++中:

<option value value='1' >A
<option value value='2' >B
<option value value='3' >C
<option value value='4' >D


Find what: (.*)(>)(.)
Replace with: \3

Replace All


A
B
C
D
Run Code Online (Sandbox Code Playgroud)


Wha*_*awg 20

A,B,C等之前的一切

这似乎很简单,我必须误解你.只是

:%s/<.*>//
Run Code Online (Sandbox Code Playgroud)

  • 在vim中,就是这样. (4认同)

and*_*app 8

除非我没有理解这个问题,否则有一个非常简单的解决方案.以下正则表达式:

(.*)(>)(.*)
Run Code Online (Sandbox Code Playgroud)

将匹配帖子中指定的模式.

因此,在记事本++中,您可以找到(.*)(>)(.*)并替换它\3.

正则表达式基本上是贪婪的,如果你指定(.*)它将匹配整行,你想要做的是以某种方式将其分解,以便你可以提取你想要保留的字符串.在这里,我完全一样,它在Notepad ++和Editplus3中工作正常.


rme*_*dor 7

原始解决方案存在两个问题.首先,您的示例文本:

<option value value='1' >A
Run Code Online (Sandbox Code Playgroud)

有两个"价值"字出现.你的正则表达式没有.此外,您需要在正则表达式的量词中转义左括号,否则Vim会将其解释为文字括号.这个正则表达式有效:

:%s/<option value value='.\{1,}' >//g
Run Code Online (Sandbox Code Playgroud)


xsl*_*xsl 6

这将删除option标签,并将字母保留在vim中:

:%s/<option.*>//g
Run Code Online (Sandbox Code Playgroud)