python - 如何匹配多行字符串中的行开头和结尾
问题描述
我想匹配多行字符串中的整行(此代码是检查正确输出格式的单元测试的一部分)。
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'>
这很好用,我可以匹配多行字符串中的任何内容。但是,我想确保我匹配整行。文档说^
and$
应该在使用时匹配行的开头和结尾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)
>>>
我想我错过了一些相当简单的东西,但无法弄清楚。
解决方案
问题是,由于您使用原始字符串作为字符串,\n
因此被视为 ...\
那么n
. \n
正则表达式会在模式中理解,但不会在输入字符串中理解。
此外,即使在那里不重要,也请始终使用flags=
关键字,因为某些正则表达式函数有一个额外的count
参数,这可能会导致错误。
像这样:
re.match(r".*^score = 0\.65$.*", "score = 0.65\nscore = 0.59\nscore = 1.0", flags=re.MULTILINE)
<_sre.SRE_Match object; span=(0, 12), match='score = 0.65'>
正如我在评论中指出的那样,.*
需要re.DOTALL
匹配换行符
>>> re.match(r".*^score = \d+\.\d+$.*", "score = 0.65\nscore = 0.59\nscore = 1.0", re.MULTILINE|re.DOTALL)
<_sre.SRE_Match object; span=(0, 37), match='score = 0.65\nscore = 0.59\nscore = 1.0'>
(如Python 正则表达式中所述,多行匹配模式..为什么这不起作用?如何在正则表达式中匹配多行中的任何字符?如果不是原始字符串位)
(对不起,我的浮点正则表达式可能有点弱,你可以找到更好的)
推荐阅读
- yii2 - yii2中如何使用faker提前模板
- oracle-apex - 如何在循环中调用两次重定向
- azure-devops - 如何捕获在 Azure DevOps 中运行管道的人员
- docker - Docker buildx - 构建失败并出现“TLS 握手超时”,而 docker pull 工作正常
- json - Groovy JsonOutput.toJson(Object) 返回空字符串
- python - 在 python 中是否有任何替代方法来替换运行时中的变量,如 unix shell 脚本 {!variableName}
- node.js - Docker 与 node.js
- c# - 如何使用 Mimekit 从 IOS 保存附件
- sql - 带有插入语句的 CTE 函数
- excel - 如何使用 SharePoint excel Services REST API 更新工作簿中的工作表(可能是单元格)