正则表达式:匹配字符+换行符(换行符)

时间:2020-07-19 20:42:27

标签: python re

字符串:

testing = "\nHello\nMy name is blah blah blah\nNice to meet you\nPS: Wait a second, I thought I know you.\nRegards\n\nUnknown\n\nHang on a minute\nI'm not done talking\n\nRegards\nOh OK"

打印:

Hello
My name is blah blah blah
Nice to meet you
PS: Wait a second, I thought I know you.
Regards

Unknown

Hang on a minute
I'm not done talking

Regards
Oh OK

所需结果:

My name is blah blah blah
Nice to meet you
PS: Wait a second, I thought I know you.
Regards

尝试的解决方案:

test = re.search('(Hello)([\s\S]*)(\n\n)', testing).group(2)

返回:

\nMy name is blah blah blah\nNice to meet you\nPS: Wait a second, I thought I know you.\nRegards\n\nUnknown\n\nHang on a minute\nI'm not done talking

但是,这遗漏了我认为与[\ s \ S]有关的第一个'\ n \ n'。有什么办法可以使我们在第一个'\ n \ n'上结束搜索?

谢谢!

1 个答案:

答案 0 :(得分:1)

*的重复者是 greedy ,它尽可能匹配直到\n\n(这是字符串中的最后一个出现)。在其后放一个问号,使它成为 non-greedy ,使其尽可能地匹配:直到第一次匹配\n\n为止:

test = re.search('(Hello)([\s\S]*?)(\n\n)', testing).group(2)
print(test)

输出:

Hello
My name is blah blah blah
Nice to meet you
PS: Wait a second, I thought I know you.
Regards