Python - 在字符串变量中查找并替换正则表达式子字符串

时间:2016-06-13 20:43:39

标签: python regex string

我有一个带有多行字符串的变量,我正在尝试用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\$'但是它也没有替换任何东西。知道我能做什么吗?

1 个答案:

答案 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 参数,所以它是最好在这里保留参数名称。