gpt4 book ai didi

python - 如何匹配多行字符串中的行首和行尾

转载 作者:太空宇宙 更新时间:2023-11-03 13:27:07 25 4
gpt4 key购买 nike

我想匹配多行字符串中的整行(此代码是检查正确输出格式的单元测试的一部分)。

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)
>>>

我想我遗漏了一些相当简单的东西,但无法弄清楚。

最佳答案

问题在于,由于您使用的是原始字符串作为字符串,因此 \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 regex, matching pattern over multiple lines.. why isn't this working?How do I match any character across multiple lines in a regular expression? 中所述,如果不是原始字符串位,这可能是重复的)

(抱歉,我的浮点正则表达式可能有点弱,你可以找到更好的)

关于python - 如何匹配多行字符串中的行首和行尾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53427320/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com