记事本++和正则表达式(多行)

时间:2018-09-23 13:18:03

标签: regex notepad++ multiline

我一直面临挑战。我有一个具有以下模式的文本文件:

SOME RANDOM TITLE IN CAPS (nnnn)
text text text
more text 
...
SOME OTHER RANDOM TITLE IN CAPS (nnnn)

可以确定的是,我要提取的是带有方括号和日期ex:(2015)的行; (20008) (nnnn)之后没有文字,有时是空格和CR LF,有时只是CR LF

我想删除其他所有内容,只保留TITLE LINE和方括号

我花的时间本可以手工完成(有100条线),但我喜欢挑战:)

我以为可以找到问题,但我被困住了。

我已经尝试过以下方法:

^.*\(\d\d\d\d\)(?s)(.*)(^.*\(\d\d\d\d\))

但是我没有得到想要的东西。我似乎无法停止(?s)(。*)一直到文本结尾,而不是在下一次出现时停止。

3 个答案:

答案 0 :(得分:3)

我建议使用“搜索”>“标记”功能。使用\(\d{4}\)之类的样式,然后选中“书签行”选项,然后单击“全部标记”。然后使用搜索>书签>删除未标记的行。这将删除所有与您的模式匹配的行。


注意::如果其他行中可能包含4位数字的括号,则可以在表达式的末尾添加$,以确保该模式仅与该行的末尾匹配。例如。 more text (1234) and other stuff将与我上面给出的模式匹配,但是如果您使用模式\(\d{4}\)$,它将不再匹配。

如果您想通过仅包含大写字母和空格的行,然后在括号内加4位数字的括号(行的结尾处)来更具体地使用样式,则可以使用类似这个:[A-Z ]+\(\d{4}\)$


样本输入:

SOME RANDOM TITLE IN CAPS (2008)
text text text
more text 
...
SOME OTHER RANDOM TITLE IN CAPS (2010)

以下是标记线条的方法:

enter image description here

点击“全部标记”后,您将看到:

enter image description here

现在使用搜索>书签>删除未标记的行,您将获得以下信息:

enter image description here

答案 1 :(得分:0)

以下RegEx将两行用括号括起来,其中包含4个数字:

.*?\(\d{4}\)\s*

它从零开始或多次(不贪心)开始匹配任何内容,然后匹配一个后跟4个数字的开始括号。最终结束空白和换行。

答案 2 :(得分:0)

如果您要删除除以(4numbers)结尾的行以外的所有行,则可以尝试以下操作:

^(?!.*\(\d{4}\)\h*$).*(?:\r?\n|\z)

替换为:(nothing)

请参见 demo