【发布时间】:2019-04-24 22:09:00
【问题描述】:
我想匹配多行字符串中的整行(此代码是检查正确输出格式的单元测试的一部分)。
Python 3.5.2 (default, Nov 12 2018, 13:43:14)
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import re
>>> re.match(r".*score = 0\.59.*", r"score = 0.65\nscore = 0.59\nscore = 1.0", re.MULTILINE)
<_sre.SRE_Match object; span=(0, 39), match='score = 0.65\\nscore = 0.59\\nscore = 1.0'>
这很好用,我可以匹配多行字符串中的任何内容。但是,我想确保我匹配整行。文档说^ 和$ 在使用re.MULTILINE 时应该匹配行的开头和结尾。但是,这对我不起作用:
>>> re.match(r".*^score = 0\.59$.*", r"score = 0.65\nscore = 0.59\nscore = 1.0", re.MULTILINE)
>>>
下面是我做的一些实验:
>>> import os
>>> re.match(r".*^score = 0\.59$.*", "score = 0.65{}score = 0.59{}score = 1.0".format(os.linesep, os.linesep), re.MULTILINE)
>>>
>>> re.match(r".*^score = 0\.65$.*", "score = 0.65{}score = 0.59{}score = 1.0".format(os.linesep, os.linesep), re.MULTILINE)
<_sre.SRE_Match object; span=(0, 12), match='score = 0.65'>
>>> re.match(r".*^score = 0\.65$.*", r"score = 0.65\nscore = 0.59\nscore = 1.0", re.MULTILINE)
>>>
我想我错过了一些相当简单的东西,但无法弄清楚。
【问题讨论】:
-
试试
flags=re.DOTALL -
变色你
-
据我了解,您想匹配第二行。问题是
.*只匹配一行,不包括换行符。您很可能希望re.DOTALL与 lazy 量词 (.*?) 结合使用。 -
删除原始字符串:
re.match(r".*^score = 0\.65$.*", "score = 0.65\nscore = 0.59\nscore = 1.0", re.MULTILINE)
标签: python regex python-3.x