用python中的re sub替换组

时间:2017-04-26 07:04:33

标签: python regex python-3.x

我有一个文本文件,我需要替换几个单词。 文件内容是


...
include ':react-native-maps'
project(':react-native-maps').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-maps/lib/android')

我正在尝试这个

user "username"
password "P@ssword"
dbname "SOME_DB_NAME"

在结果中,re.sub替换了regexp匹配的所有符号,如何只替换匹配的组?

1 个答案:

答案 0 :(得分:1)

正则表达式匹配一些文本字符串,并且有一个捕获机制,允许存储子匹配,以便在找到匹配项后可以引用/重用。

所以,抓住你需要保留的东西并匹配其余部分。在您的情况下,您需要在新密码周围保留password,空格和"

使用

import re

s = """
user "username"
password "P@ssword"
dbname "SOME_DB_NAME"
"""
r = re.compile(r'({}\s")[\w@#$%^&*]+"'.format('password'))
print(r.sub(r'\1new_passw0rd"', s))

请参阅Python demo

输出:

user "username"
password "new_passw0rd"
dbname "SOME_DB_NAME"

此处,(password\s")匹配并捕获password +空白+ "到第1组(稍后用\1反向引用 - 请注意{{1原始字符串声明)和r''只匹配1+字和一些特殊字符后跟[\w@#$%^&*]+"(也可以捕获,但我只是在替换中使用了"来放置它回到结果中。)