Skip to main content
 首页 » 编程设计

python re.search 不适用于多行字符串

2025年05月04日21mq0036

我在字符串中加载了这个文件:

// some preceding stuff 
static char header_data[] = { 
    1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1, 
    1,1,1,0,1,1,0,1,1,0,1,1,0,1,1,1, 
    1,1,0,1,0,1,0,1,1,0,1,0,1,0,1,1, 
    1,0,1,1,1,0,0,1,1,0,0,1,1,1,0,1, 
    0,0,0,1,1,1,1,1,1,1,1,1,1,0,1,1, 
    1,0,0,0,1,1,0,1,1,1,1,1,0,1,1,1, 
    0,1,0,0,0,1,0,0,1,1,1,1,0,0,0,0, 
    0,1,1,0,0,0,0,0,0,1,1,1,1,1,1,0, 
    0,1,1,1,0,0,0,0,0,0,1,1,0,1,1,0, 
    0,0,0,0,1,0,0,0,1,0,0,1,0,1,0,0, 
    1,1,1,0,1,1,0,0,1,1,0,0,0,1,1,1, 
    1,1,0,1,1,1,1,1,1,1,1,0,0,0,1,1, 
    1,0,1,1,1,0,0,1,1,0,0,0,0,0,1,1, 
    1,1,0,1,0,1,0,1,1,1,1,0,0,0,0,1, 
    1,1,1,0,1,1,0,1,1,0,1,1,1,1,0,1, 
    1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1 
    }; 

我只想获取包含 1 和 0 的 block ,然后以某种方式对其进行处理。

我导入了 re,并尝试了:

In [11]: re.search('static char header_data(.*);', src, flags=re.M) 
 
In [12]: re.findall('static char header_data(.*);', src, flags=re.M) 
Out[12]: [] 

为什么它不匹配任何东西?如何解决这个问题? (是python3)

请您参考如下方法:

您需要使用 re.S 标志,而不是 re.M。

  • re.M (re.MULTILINE) 控制 ^ 和 $ 的行为(它们是否匹配在整个字符串或每一行的开头/结尾)。
  • re.S (re.DOTALL) 控制 . 的行为,当您想要允许点以匹配换行符。

另见 documentation .