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

需要匹配的字符串:
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
阅读 9k
2 个回答

用正则匹配的方式

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题