正则怎么匹配结尾的换行符呢?

需要匹配的字符串:
http {
  server {
    key5;
    key0 value0;
    key9;
  }
  server {
    key7 value7;
  }
  key3;
}
double = r'\s*"[^"]*"'
single = r'\s*\'[^\']*\''
normal = r'\s*[^;\s]*'
s1 = r'{}|{}|{}'.format(double, single, normal)
s = r'^\s*({})\s*((?:{})+);'.format(s1, s1)
m = re.compile(s, re.S).search(data[index:])
if m:
    print '>>>', m.group(1), m.group(2)

如果s变量用分号作为结尾匹配则可以成功,结果为

>>> key5 
>>> key0 value0
>>> key9 
>>> key7 value7
>>> key3 

但是如果原配置文件结果不是分号,而是仅仅是一个换行的话,为什么用以下s变量则匹配失败呢?

s = r'^\s*({})\s*((?:{})+)\n'.format(s1, s1)

输出结果却为:

>>> key5 key0 value0
    key9
  }
  server {
    key7 value7
  }
  key3
阅读 9.1k
2 个回答

用正则匹配的方式

推荐问题