【发布时间】:2014-09-20 05:33:33
【问题描述】:
我有一个这样的字符串消息
msg = "abc 123 \n 456"
我想做这样的事情
m = re.match('abc (.*)',msg)
并让 m.groups 返回“123 \n 456”
但目前它只返回“123”
我将如何捕获字符串的其余部分,而不仅仅是直到行尾
【问题讨论】:
标签: python regex string match newline
我有一个这样的字符串消息
msg = "abc 123 \n 456"
我想做这样的事情
m = re.match('abc (.*)',msg)
并让 m.groups 返回“123 \n 456”
但目前它只返回“123”
我将如何捕获字符串的其余部分,而不仅仅是直到行尾
【问题讨论】:
标签: python regex string match newline
使用s (dotall) 修饰符强制点匹配所有字符,包括换行符。
>>> import re
>>> msg = "abc 123 \n 456"
>>> m = re.match(r'(?s)abc (.*)', msg)
>>> m.group(1)
'123 \n 456'
【讨论】:
您需要使用re.DOTALL 标志,否则. 正则表达式原子将无法匹配换行符。
re.DOTALL:使'.'特殊字符完全匹配任何字符,包括换行符;如果没有这个标志,'.'将匹配任何内容除了换行符。
所以这应该做你想要的:
m = re.match('abc (.*)', msg, re.DOTALL)
【讨论】: