如果字符串中存在换行符,则python正则表达式无法匹配?

时间:2015-09-29 11:28:15

标签: python regex string

我正在使用正则表达式来查找字符串中的时间:

re.match('.*(\d{2}-\d{2} \d{2}:\d{2})', "09-22 13:27")

无论如何,这没关系,但如果\n存在,则返回None

re.match('.*(\d{2}-\d{2} \d{2}:\d{2})', "\n09-22 13:27")

为什么.*无法匹配\n?以及如何处理这个?

3 个答案:

答案 0 :(得分:2)

  

为什么.*无法匹配\n?以及如何处理这个?

re documentation说:

  

re.DOTALL
  使.特殊字符与任何字符匹配,包括换行符;如果没有此标记,.将匹配除换行符之外的任何内容。

您应该注意.匹配任何符号,但换行符。使用re.Sre.DOTALL)标记将换行符与.匹配:

import re
obj = re.match('.*(\d{2}-\d{2} \d{2}:\d{2})', "\n09-22 13:27", re.S)
if obj:
    print(obj.group(1))

请参阅IDEONE demo

答案 1 :(得分:1)

print re.match('.*(\d{2}-\d{2} \d{2}:\d{2})', "\n09-22 13:27".strip())

                                                              ^^^^^^^^

您只需strip newline

答案 2 :(得分:1)

您可以使用(?)排除换行符。

st =  "\n\n09-22 13:27\n"
import re
mo = re.findall(r'(?<!\S)\d{2}-\d{2}\D+\d{2}:\d{2}(?!\S)',st)
print(mo)

结果:

['09-22 13:27']