我有一个带有多行字符串的变量,我正在尝试用test v1.0
替换行upside
,但问题是我只是在整个行匹配模式时才尝试替换它所以它不应该替换第一个test v1.0.1
pkgLogExtract = dedent("""
test v1.0.1
nothing
test v1.0
out
in
flip
""")
print (re.sub(r'\^test v1.0\$', "upside", pkgLogExtract, 1))
我尝试使用re.sub
并将'\^test v1.0\$'
作为替换模式,但它不会替换任何内容。我也尝试过使用raw标志,所以r'\^test v1.0\$'
但是它也没有替换任何东西。知道我能做什么吗?
答案 0 :(得分:3)
\^
与文字^
匹配。 $
也是如此。您需要将flags=re.M
传递给re.sub
并从^
和$
中删除反斜杠,以便它们可以分别匹配行的开头和结尾。并逃避.
。
请参阅此IDEONE demo:
import re
pkgLogExtract = """
test v1.0.1
nothing
test v1.0
out
in
flip
"""
print (re.sub(r'^test v1\.0$', "ngn", pkgLogExtract, 1, flags=re.M))
注意:我想您知道1
代表单个替换(只有第一个匹配才会被替换)。
注2:您可以省略flags=
并使用re.M
,但很多人忘记使用上面提到的 count
参数,所以它是最好在这里保留参数名称。