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

时间:2008-11-13 16:25:07

标签: regex vim notepad++

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

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

这是几百行,我真的不想手动做。我试图使用的表达是:

<option value='.{1,}' >

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

16 个答案:

答案 0 :(得分:63)

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

按住alt以允许您一次选择多行的文本矩形。选择要删除的块,然后按删除。

答案 1 :(得分: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

答案 2 :(得分:20)

A B C 等之前的所有内容

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

:%s/<.*>//

答案 3 :(得分:8)

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

(.*)(>)(.*)

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

因此,在记事本++中,您会找到(.*)(>)(.*)并将其替换为\3

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

答案 4 :(得分:7)

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

<option value value='1' >A

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

:%s/<option value value='.\{1,}' >//g

答案 5 :(得分:6)

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

:%s/<option.*>//g

答案 6 :(得分:4)

如果你不那么具体,这可能会有所帮助。你的表达是“贪婪的”,不同的程序可能会以不同的方式解释。在vim中试试这个:

%s/^<[^>]+>//

答案 7 :(得分:3)

在vim

:%s/<option value='.\{1,}' >//

:%s/<option value='.\+' >//

在vim正则表达式中,您必须转义一个或多个符号,捕获括号, 有限数字花括号和其他一些。

请参阅:help /magic,了解哪些特殊字符需要转义(以及如何更改)。

答案 8 :(得分:3)

在记事本++中

搜索

(<option value="\w\w">)\w+">(.+)

替换为

\1\2

答案 9 :(得分:2)

有同样的问题(使用jQuery“完成...”字符串),但只在Notepad ++中,我问,收到了很好的友好回复(这让我明白了我错过了),然后花时间建立一个详细的分步说明,请参阅 Finding Line Beginning using Regular expression in Notepad++

Versailles,2010年4月27日星期二22:53:25 +0200

答案 10 :(得分:2)

Notepad ++:搜索模式=正则表达式

找到:(。*&gt;)(。)

替换为:\ 2

答案 11 :(得分:1)

这会奏效。在我的vim中测试过它。单引号是麻烦。

1,$s/^<option value value=['].['] >/

答案 12 :(得分:1)

的Vim:

:%s​​ /.*&gt; //

答案 13 :(得分:1)

事后一点点,但是如果它对任何人都有用,我可以按照这里的一个例子(通过sdgfsdg)快速选择Notepad的正则表达式。

我必须同样从HTML选择下拉选项列表中提取一些冗余数据,格式为:

<select>
  <option value="AC">saint_helena">Ascension Island</option>
  <option value="AD">andorra">Andorra</option>
  <option value="AE">united_arab_emirates">United Arab Emirates</option>
  <option value="AF">afghanistan">Afghanistan</option>:
  ...
</select>

我真正想要的是:

<select>
  <option value="AC">Ascension Island</option>
  <option value="AD">Andorra</option>
  <option value="AE">United Arab Emirates</option>
  <option value="AF">Afghanistan</option>
  ...
</select>

经过一些拉毛后,我意识到从版本5.8。5(2010年9月)开始,正则表达式似乎仍然不允许表达式中的某些循环(除非有另一种语法),例如,以下甚至可以找到“&gt; united_arab_emirated_emirates”&gt;尽管它有额外的分离下划线:

(">)([a-z]+([_]*[a-z]*)*)(">)

此查询适用于大多数通用RegEx tools,但在Notepad ++中,我必须手动考虑嵌套下划线的最大数量(不幸的是8),使用了更多的丑陋:

(">)([a-z]+[_]*[a-z]*[_]*[a-z]*[_]*[a-z]*[_]*[a-z]*)[_]*[a-z]*[_]*[a-z]*[_]*[a-z]*[_]*[a-z]*(">)

如果有人知道在Notepad ++的替换功能中模拟Regex循环的方法,请告诉我。


查找内容: *(“&gt;)([az] + [_] [az] [_] [az] [_] [AZ] [_] [AZ] )[_] [AZ] [_] [AZ] < / EM> [_] [AZ] [_] [AZ] (“&GT;)*


替换为: “&gt;


结果: 已更换255次。

答案 14 :(得分:1)

这是关于Notepad ++正则表达式的一篇很好的文章 http://markantoniou.blogspot.com/2008/06/notepad-how-to-use-regular-expressions.html

答案 15 :(得分:0)

非常简单,只需查找:

<option value value=.*?>

并点击替换