我需要一个正则表达式来查找文件中的特定行,该行出现在另一行之后的某个地方。例如,我可能想要找到字符串“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
,它不起作用。
答案 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工作所必需的。