32

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

<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++ 中使用该表达式时,它似乎找不到任何东西。

4

16 回答 16

63

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

按住 alt 可让您一次在多行中选择一个文本矩形。选择要删除的块,然后按删除。

于 2010-11-16T17:20:30.803 回答
30

在记事本++中:

<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
于 2009-01-07T20:07:02.687 回答
20

在ABC等之前的所有内容。

这似乎很简单,我一定是误解了你。只是

:%s/<.*>//
于 2008-11-13T17:25:14.177 回答
8

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

(.*)(>)(.*)

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

因此,在 notepad++ 中,您可以找到(.*)(>)(.*)并将其替换为\3.

从某种意义上说,正则表达式基本上是贪婪的,如果您指定(.*)它将匹配整行并且您想要做的是以某种方式将其分解,以便您可以提取您想要保留的字符串。在这里,我做了完全相同的事情,它在 Notepad++ 和 Editplus3 中运行良好。

于 2008-11-13T17:01:21.183 回答
7

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

<option value value='1' >A

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

:%s/<option value value='.\{1,}' >//g
于 2008-11-13T16:43:27.537 回答
6

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

:%s/<option.*>//g
于 2008-11-13T16:29:50.590 回答
4

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

%s/^<[^>]+>//
于 2008-11-13T16:30:24.100 回答
4

在记事本++

搜索

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

用。。。来代替

\1\2
于 2011-03-29T09:48:01.807 回答
3

在 vim 中

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

或者

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

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

查看:help /magic哪些特殊字符需要转义(以及如何更改)。

于 2008-11-13T17:01:38.810 回答
2

遇到同样的问题(使用 jQuery“完成...”字符串),但仅在 Notepad++ 中,我问,收到了很好的友好回复(这让我明白我错过了什么),然后花时间构建详细的逐步- 步骤说明,请参阅在 Notepad++ 中使用正则表达式查找行开头

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

于 2010-04-21T07:43:00.600 回答
2

记事本++:搜索模式=正则表达式

查找内容:(.*>)(.)

替换为:\2

于 2013-04-22T08:07:33.763 回答
1

这将起作用。在我的vim中测试过。单引号是麻烦。

1,$s/^<option value value=['].['] >/
于 2008-11-13T16:31:12.927 回答
1

维姆:

:%s/.* >//

于 2008-11-13T16:33:03.907 回答
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 月)开始,正则表达式似乎仍然不允许表达式中的某些循环(除非有另一种语法),例如,下面会发现甚至">united_arab_emirated_emirates"> 尽管有额外的分隔下划线:

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

此查询在大多数通用RegEx 工具中都有效,但在 Notepad++ 中,我必须手动计算嵌套下划线的最大数量(不幸的是 8 个),使用更丑陋的:

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

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


查找内容: *(">)([az]+[_] [az] [_] [az] [_] [az] [_] [az] )[_] [az] [_] [az] [_] [az] [_] [az] (">)*


替换为: ">


结果: 替换了 255 次。

于 2010-12-24T08:06:39.700 回答
1

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

于 2011-01-21T08:51:07.283 回答
0

非常简单,只需查找:

<option value value=.*?>

并单击替换

于 2016-05-09T06:29:28.827 回答