我有一个文本文件,我需要替换几个单词。 文件内容是
...
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匹配的所有符号,如何只替换匹配的组?
答案 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@#$%^&*]+"
(也可以捕获,但我只是在替换中使用了"
来放置它回到结果中。)