Regex 多行上的负前瞻
如果配置无效,我想将“keepalive”替换为“keepalive 10 60”,如果找不到“keepalive”,则插入“keepalive 10 60” 到目前为止,我已经想出了这个方法,但在找到并替换“keepalive”时,它仍然会插入每一个空行:Regex 多行上的负前瞻,regex,regex-negation,Regex,Regex Negation,如果配置无效,我想将“keepalive”替换为“keepalive 10 60”,如果找不到“keepalive”,则插入“keepalive 10 60” 到目前为止,我已经想出了这个方法,但在找到并替换“keepalive”时,它仍然会插入每一个空行: ^keepalive(?!(\s[[:digit:]]{1,3}){2}).*\n|((?<!keepalive)^$(?!keepalive)) 预期: keepalive 60 90 resolv-retry infinite
^keepalive(?!(\s[[:digit:]]{1,3}){2}).*\n|((?<!keepalive)^$(?!keepalive))
预期:
keepalive 60 90
resolv-retry infinite
keepalive 60 90
resolv-retry infinite
结果:
keepalive 60 90
keepalive 60 90
resolv-retry infinite
keepalive 60 90
keepalive 60 90
resolv-retry infinite
场景2:
keepalive 60
resolv-retry infinite
resolv-retry infinite
预期:
keepalive 60 90
resolv-retry infinite
keepalive 60 90
resolv-retry infinite
结果:
keepalive 60 90
keepalive 60 90
resolv-retry infinite
keepalive 60 90
keepalive 60 90
resolv-retry infinite
我对regex非常缺乏经验,非常感谢任何指导和提示 分两步进行:
步骤1:通过删除“keepalive 60”来规范文本
步骤2:将“resolv retry infinite”替换为您想要的任何内容
re.sub(r"resolv-retry infinite","whatever your want", your_str)
#adjust for "\n" as necessary
分两步进行:
步骤1:通过删除“keepalive 60”来规范文本
步骤2:将“resolv retry infinite”替换为您想要的任何内容
re.sub(r"resolv-retry infinite","whatever your want", your_str)
#adjust for "\n" as necessary
对于给定的场景:谢谢,但是我还想用“resolv retry infinite”做同样的事情,所以它不适合我的用例。问题似乎是(消极的)向前看/向后看并没有扫描整个文件。也许像这样的问题和以前一样,但感谢您的努力。对于给定的场景:谢谢,但我也想用“resolv retry infinite”做同样的事情,所以它不适合我的用例。问题似乎是(消极的)向前/向后看并没有扫描整个文件。也许像这样的问题和以前一样,但感谢您的努力。我想添加“resolv retry infinite”,如果不是在字符串中,或者,例如,将“resolv retry 5”替换为“keepalive 60”。无论如何,因为我需要一个bash脚本,所以我最终只使用了“sed-I-E的/^.*keepalive.$///gm;t;d'$config_file”和“printf”\nkeepalive 10 60“>>$config_file”,尽管使用一个正则表达式(命令?)会很好。如果不是在字符串中,我想添加“resolv retry infinite”,或者,例如,替换“resolv retry 5”“keepalive 60”也一样。无论如何,因为我需要一个bash脚本,所以我最终只使用了“sed-I-E的/^.*keepalive.$///gm;t;d'$config_file”和“printf”\nkeepalive 10 60“>>$config_file”,尽管使用一个正则表达式(命令?)会很好。