正则表达式,选择所有不在方括号之间

时间:2016-05-04 14:37:50

标签: regex notepad++

我有一个包含大量"标签的大型字符串文件" [[串]]。我一直在尝试使用notepad ++来解压缩这些标记,并使用regex启用替换。到目前为止,我所管理的只是匹配[[STRING]]的内容。

\[\[([^]]+)\]\]

任何人都可以为我提供搜索和替换的正则表达式,这会让我只在新行上列出[[STRING]]列表吗?

由于

2 个答案:

答案 0 :(得分:2)

您可以使用替换版本替换模式:

(\[\[[^]]+]])|(?:(?!\[\[[^]]+]]).)+
 ^^^^^^^^^^^        ^^^^^^^^^^^

并替换为$1\n。请参阅regex demo .匹配换行符应该启用。如果使用此版本的性能不佳,请使用展开的版本:

(\[\[[^]]+]])|[^[]*(?:\[(?!\[)[^[]*)*

请参阅the regex demo

(?:(?!\[\[[^]]+]]).)+是一个驯化的贪婪令牌,它作为一个否定的字符类,但带有字符序列(匹配“abc”以外的任何文本)。

enter image description here

然后,只删除所有空行(编辑 - > 行操作 - > 删除空行)。

好吧,您也可以使用更简单的正则表达式(\[\[[^]]+]])|.替换为$1\n,但它会添加太多的换行符。实际上,这应该不是问题,因为您可以稍后删除所有空行。只要使用最适合你的东西。

答案 1 :(得分:2)

保持简单
查找(?s).*?(?:(\[\[[^\[\]]+\]\])|$)
替换$1\n

 (?s)
 .*? 
 (?:
      (                             # (1 start)
           \[\[
           [^\[\]]+ 
           \]\]
      )                             # (1 end)
   |  
      $ 
 )

Yours效率不如mine。 - WiktorStribiżew

Regex1:   (?s).*?(?:(\[\[[^\[\]]+\]\])|$)
Options:  < none >
Completed iterations:   50  /  50     ( x 1000 )
Matches found per iteration:   3
Elapsed Time:    0.29 s,   290.80 ms,   290799 µs


Regex2:   (\[\[[^]]+]])|[^[]*(?:\[(?!\[)[^[]*)*
Options:  < none >
Completed iterations:   50  /  50     ( x 1000 )
Matches found per iteration:   5
Elapsed Time:    0.68 s,   677.31 ms,   677309 µs

这也应该有效:(?s).*?(\[\[[^\[\]]+\]\]|$)。我认为你不必将它放入非捕获组。 - ccf

工作,但没有任何区别。

Regex1:   (?s).*?(?:(\[\[[^\[\]]+\]\])|$)
Options:  < none >
Completed iterations:   100  /  100     ( x 1000 )
Matches found per iteration:   3
Elapsed Time:    0.58 s,   580.74 ms,   580737 µs


Regex2:   (?s).*?(\[\[[^\[\]]+\]\]|$)
Options:  < none >
Completed iterations:   100  /  100     ( x 1000 )
Matches found per iteration:   3
Elapsed Time:    0.59 s,   589.32 ms,   589323 µs