我正在寻找一种正则表达式的方式,它可以让我在一段文本中得到所有内容,直到第一个空行。我有以下内容:
reg = r'((Opposition|Oppose):?\s*)(.*?)\n\n'
str1 = """Opposition
California Attorneys for Criminal Justice
Californians for Safety and Justice
Drug Policy Alliance
Friends Committee on Legislation of California
Legal Services for Prisoners with Children
Analysis Prepared
"""
str2 = """Oppose: None received
-- END --
"""
当我运行时:
match = re.search(reg, str1, re.DOTALL)
print ma
tch.group(3)
我得到:
California Attorneys for Criminal Justice
Californians for Safety and Justice
Drug Policy Alliance
Friends Committee on Legislation of California
Legal Services for Prisoners with Children
但是当我运行时:
match = re.search(reg, str2, re.DOTALL)
print match.group(3)
我得到:
None received
-- END --
第一个字符串的结果是正确的,但我想从第二个字符串中得到的只是“None received”。我无法很好地解释为什么我也会收到“-- END --”。我的正则表达式不应该匹配“未收到”之后的\n 以及空白行上的\n 并停止吗?任何帮助将不胜感激
请您参考如下方法:
您可以确保将纯空格行与 [^\S\n]* 匹配(= 匹配 0 个或多个非空格或换行符以外的字符 ):
((Oppos(?:e|ition)):?\s*)(.*?)\n[^\S\n]*\n[^\S\n]*
参见 demo
我还稍微缩短了第二个捕获组。
这是一个 IDEONE demo
