Skip to main content
 首页 » 编程设计

Python 正则表达式,用于空白行之前的所有内容

2025年05月04日30bluestorm

我正在寻找一种正则表达式的方式,它可以让我在一段文本中得到所有内容,直到第一个空行。我有以下内容:

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