我有一个带有多行字符串的变量,我正在尝试将行 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\$'
但这也不能替代任何内容。知道我能做什么吗?
最佳答案
\^
与文字 ^
匹配。 $
也是如此。您需要将 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
参数,因此最好将参数名称保留在此处。
关于Python-查找并替换字符串变量中的正则表达式子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37798808/