我有一个包含大量"标签的大型字符串文件" [[串]]。我一直在尝试使用notepad ++来解压缩这些标记,并使用regex启用替换。到目前为止,我所管理的只是匹配[[STRING]]的内容。
\[\[([^]]+)\]\]
任何人都可以为我提供搜索和替换的正则表达式,这会让我只在新行上列出[[STRING]]列表吗?
由于
答案 0 :(得分:2)
您可以使用替换版本替换模式:
(\[\[[^]]+]])|(?:(?!\[\[[^]]+]]).)+
^^^^^^^^^^^ ^^^^^^^^^^^
并替换为$1\n
。请参阅regex demo。 .
匹配换行符应该启用。如果使用此版本的性能不佳,请使用展开的版本:
(\[\[[^]]+]])|[^[]*(?:\[(?!\[)[^[]*)*
(?:(?!\[\[[^]]+]]).)+
是一个驯化的贪婪令牌,它作为一个否定的字符类,但带有字符序列(匹配“abc”以外的任何文本)。
然后,只删除所有空行(编辑 - > 行操作 - > 删除空行)。
好吧,您也可以使用更简单的正则表达式(\[\[[^]]+]])|.
替换为$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