【发布时间】:2017-03-02 17:33:16
【问题描述】:
我在使用正则表达式时遇到了问题,也许你可以帮我解决。我的行变量包含我想要操作的这些类型的字符串(每个 for-loop 循环一个字符串):
sip="100.107.0.5" sp="123" dip="100.107.193.1" dp="123" nat-dip="84.2.44.19"
sip="100.101.199.1" sp="37690" dip="100.107.0.4" dp="80" nat-dip="100.107.0.4"
简单的部分:当dip=和nat-dip=后引号内的值相等时,将子串nat-dip="..."完全删除。这很容易做到:
line = re.sub(r'dip="([^"]+)(" .+)nat-dip="\1" ' ,r'dip="\1\2' ,line)
但可怕的是:当值不相等时,写入 nat-dip= 的值代替 dip= 的值。我尝试了负前瞻和捕获值,但它不断失败,我无法找出代码行的错误部分,即:
line = re.sub(r'dip="([^"]+)(" .+)(?!nat-dip="(\1)") ' ,r'dip="\3\2' ,line)
我得到的只是:
sip="100.107.0.5" sp="123" dip="" dp="123" nat-dip="84.2.44.19"
... 而不是这个:
sip="100.107.0.5" sp="123" dip="84.2.44.19" dp="123"
我做错了什么?你有什么建议吗?
【问题讨论】:
-
你在处理html/xml吗?
-
没有。原始文本。一行一行
-
@zweiund40 当值不匹配时,dip 的值应设置为 nat-dip。那么 nat-dip 是否也应该被移除?
标签: python regex string negative-lookahead