Regex 重新打印整个输入及其修改
我只需要在配置文件中执行参数替换:Regex 重新打印整个输入及其修改,regex,python-3.x,parsing,Regex,Python 3.x,Parsing,我只需要在配置文件中执行参数替换: #!/usr/bin/python3 import re current_config = ''' #USERNAME [name = foo] #-USERNAME #DATABASE [config = old] #-DATABASE #MORE_FIELDS [moresettings] #-MORE_FIELDS ''' new_config =''' #DATA
#!/usr/bin/python3
import re
current_config = '''
#USERNAME
[name = foo]
#-USERNAME
#DATABASE
[config = old]
#-DATABASE
#MORE_FIELDS
[moresettings]
#-MORE_FIELDS
'''
new_config ='''
#DATABASE
[config = new]
#-DATABASE
'''
final = re.sub('#DATABASE}}(.*)#-#{{#-DATABASE}}', current_config, new_config)
print(final)
正则表达式本身工作正常,问题是它只打印(正确)修改的部分,而忽略文件的其余部分:
dev-sandbox@workstation:~/PycharmProjects/test$ python3 test.py
#DATABASE
[config = new]
#-DATABASE
我想要实现的是整个“current_config”变量,包括数据库块的新设置。我在shell上使用SED,但我需要python3中的这个
非常感谢您的任何帮助,re.sub的文档表明它无法完成。谢谢大家! 目标字符串中的
#-#
在哪里?请尝试(?s)#数据库。*?#-数据库
谢谢!目标字符串中没有这样的“#-#”模式。老实说,我不知道它是做什么的,这是我得到的正则表达式规则的一部分,但我认为它工作得很好,因为它正确地识别了“#数据库”并打印出了新的参数。我尝试了您的建议,但恐怕它所做的只是打印当前_设置的值,它没有执行更改([config=old])。这是修改后的行:final=re.sub(“(?si)#DATABASE.*?#-DATABASE”,current#config,new#config)您可能将参数放错了位置。原型是re.sub(pattern,repl,string,max=0)
。你上次评论的第一个建议解决了这个问题。非常感谢您的帮助!目标字符串中的#-#
在哪里?请尝试(?s)#数据库。*?#-数据库
谢谢!目标字符串中没有这样的“#-#”模式。老实说,我不知道它是做什么的,这是我得到的正则表达式规则的一部分,但我认为它工作得很好,因为它正确地识别了“#数据库”并打印出了新的参数。我尝试了您的建议,但恐怕它所做的只是打印当前_设置的值,它没有执行更改([config=old])。这是修改后的行:final=re.sub(“(?si)#DATABASE.*?#-DATABASE”,current#config,new#config)您可能将参数放错了位置。原型是re.sub(pattern,repl,string,max=0)
。你上次评论的第一个建议解决了这个问题。非常感谢您的帮助!