正则表达式:在另一行之后找到一条线

时间:2015-08-14 16:22:38

标签: regex

我需要一个正则表达式来查找文件中的特定行,该行出现在另一行之后的某个地方。例如,我可能想要找到字符串“friend”,但只有当它出现在包含字符串“hello”的行之后的一行上时。例如:

hello there
how are you
my friend

应该通过,但是

how are you
my friend
hello

hello friend
how are you

不应该通过。

我唯一想到的就是hello[.\s]*\n[.\s]*friend,它不起作用。

编辑:我正在使用一个有很多限制的自定义程序。我无法访问开关或自定义模式。我需要一个适用于标准python正则表达式模式的正则表达式。

2 个答案:

答案 0 :(得分:2)

hello[.\s]*\n[.\s]*friend

首先请注意,字符类中的点匹配文字点,而不是"匹配所有"字符,所以你真的想要交替,而不是字符类。但也不是说"匹配所有" dot也会匹配空格,所以你甚至不需要交替。

总的来说,你真的需要这个:

hello.*?friend

现在出现了匹配新行字符的问题。默认情况下,"匹配所有" dot与新行字符不匹配。您可以标记/修改它以匹配它,但是如何执行此操作取决于您使用的语言。在php或perl中,您可以使用s修饰符,例如

<强> PHP:

preg_match('~hello.*?friend~s',$content);

修改

如果你试图在编辑器之类的东西中使用正则表达式(或者不能添加标志/修饰符),大多数编辑都可以选择标记它。如果没有,您可以尝试使用换行符替换:

hello(.|\r?\n)*friend

答案 1 :(得分:0)

我绝不是正则表达式专家(尤其不是Python),但我的RegexBuddy应用程序认为这样可行:

(?s)hello.*\n+.*friend

(?s)显然是一种指定&#34; Dot匹配换行符的内联方式&#34;选项,这似乎是\ n工作所必需的。