多行正则表达式搜索和替换!

时间:2009-09-17 20:03:08

标签: regex text-editor

我撞墙了。有没有人知道一个好的文本编辑器,它有像Notepad ++一样的搜索和替换,但也可以进行多行正则表达式搜索和替换?基本上,我试图找到一些可以匹配正则表达式的东西:

搜索oldlog\(.*\n\s+([\r\n.]*)\);
替换newlog\(\1\)

有什么想法吗?

14 个答案:

答案 0 :(得分:10)

Notepad ++现在可以处理多行正则表达式(只是更新到最新版本 - 功能是在12月左右推出的)。

我需要从HTML文档中删除所有onmouseout和onmouseover语句,我需要创建一个非贪婪的多行匹配。

onmouseover=.?\s*".*?"

如果您想使用多行匹配功能,请务必选中:

[ ] . matches newline
复选框。

答案 1 :(得分:8)

EditPad Pro具有比我曾经使用的任何其他编辑器更好的正则表达式功能。

另外,我怀疑你的正则表达式中有错误 - [\r\n.]只会匹配回车,换行符和句号。如果您尝试匹配任何字符(即“点运算符加CR和LF),请尝试[\s\S]

答案 2 :(得分:5)

我的个人推荐是IDM Computing的UltraEdit(www.ultraedit.com) - 它可以使用Perl,Unix和UltraEdit语法进行正则表达式(搜索和替换)。多行匹配是其中Perl正则表达式模式的功能之一。

它还具有其他不错的搜索功能(例如在特定字符列范围内搜索,在多个文件中搜索,搜索历史记录,搜索收藏夹等等)。

alt text
(来源:ultraedit.com

答案 3 :(得分:5)

Zeus编辑器可以进行多行搜索和替换。

答案 4 :(得分:5)

我使用Eclipse,这是免费的,如果您是开发人员,则可能已经拥有。 '\ R'充当平台无关的行分隔符。以下是多行搜索的示例:

搜索:

  

\ bibitem。(\ r 的)?\ r {([^ {)} $ \ r ^([^ \]。 [^} ] $ \ R. $ \ R上。

并替换:

  

\ defcitealias {$ 2} {$ 3}

答案 5 :(得分:5)

我很确定Notepad ++现在可以通过TextFX插件(默认情况下包含)来实现。在Notepad ++中点击Control-R并进行游戏。

答案 6 :(得分:4)

TextPad具有良好的正则表达式搜索和替换功能;我已经习惯了一段时间,我很高兴。

TextPad screenshot

来自Features

  

强大的搜索/替换引擎使用   UNIX风格的正则表达式,带   编辑器宏的力量。套   目录树中的文件可以是   搜索,文本可以替换   所有打开的文件一次。

要获得比您可能需要的更多选项,请在Notepad++ Alternatives点击“AlternativeTo.net”。

答案 7 :(得分:2)

您可以使用Python Script插件进行多行正则表达式搜索和替换! - http://npppythonscript.sourceforge.net/docs/latest/scintilla.html?highlight=pymlreplace#Editor.pymlreplace

# This example replaces any <br/> that is followed by another on the next line (with optional spaces in between), with a single one
editor.pymlreplace(r"<br/>\s*\r\n\s*<br/>", "<br/>\r\n")

答案 8 :(得分:2)

我一直使用Notepad ++,但它的Regex总是有点缺乏。

Sublime Text就是你想要的。

答案 9 :(得分:1)

EditPlus使用正则表达式(包括多行)

在搜索/替换方面做得很好

答案 10 :(得分:0)

您可以使用Visual Studio。如果您没有副本,请免费下载Express。

VS的正则表达式是非标准的,所以你必须改为使用\ n:b + [\ r \ n]。

答案 11 :(得分:0)

最新版本的UltraEdit具有多行查找和替换w / regex支持。

或者如果你可以使用更专业的正则表达式工具,那就是Regex Hero。它具有能够即时完成所有工作的附带好处。换句话说,您不必单击按钮来测试正则表达式,因为它会在每次按键后自动测试。

就个人而言,如果我想要替换多个文件中的文本,我会使用UltraEdit。这样我就可以选择要替换为批处理的文件,然后单击“替换”。但是如果我正在使用单个文本文件并且我需要编写更复杂的正则表达式,那么我会将其粘贴到Regex Hero中并在那里使用它。这是因为当你看到所有事情都是实时发生时,Regex Hero可以节省时间。

答案 12 :(得分:0)

ED for windows有两个版本的正则表达式,三种剪切和粘贴(选择,线条或块,你可以从一个转换到下一个(不像超编辑,最好是笨重)只有一个在突出显示时点击鼠标 - 无需下拉菜单。完成工作的绝对速度令人难以置信,就像在Kindle上阅读一样,你不必考虑它。

答案 13 :(得分:0)

您可以使用最新版本的Notepad ++(我的是6.2.2)。

无需使用另一个答案中建议的“.new newline”选项。相反,使用适当的正则表达式,^表示“行首”,$表示“行尾”。然后在$文件中使用\ r \ n作为dos文件中的“新行”(或者只是在unix文件中的\ n,因为回车主要用于dos / windows文本文件):

例如:在以标签UID开头的行(从gedcom文件 - 在家谱中使用)之后删除以标签OBJE开头的所有行,我确实使用了以下搜索正则表达式:

^UID (.*)$\r\n^(OBJE (.*)$\r\n)+

以下替换值:

UID \1\r\n

这是匹配的行:

UID 4FBB852FB485B2A64DE276675D57A1BA
OBJE @M4@
OBJE @M3@
OBJE @M2@
OBJE @M1@

并且替换的输出是

UID 4FBB852FB485B2A64DE276675D57A1BA

在不到1秒的时间内更换了550个实例。 Notepad ++非常有效!

否则,要验证正则表达式,我想使用.Net RegEx Tester(http://regexhero.net/tester/)。在Reg Ex ...中快速编写和测试真的很棒。

PS。:此外,您可以在正则表达式中使用[\s\S]来匹配任何字符,包括新行。因此,如果您查找以“xxx”开头并以“abc”结尾的“多行”文本块,则以下正则表达式可以正常:^xxx[\s\S]*?abc$其中"*?"匹配较少尽可能在xxx和abc之间!!!