将后向模式与匹配的正则表达式搜索模式组合在一起以整体替换

时间:2018-09-05 10:06:12

标签: python regex lookbehind

我必须搜索并替换具有以下条件的模式: 如果在一行中找到字符串“ y = 2”,并且在字符串“ y = 2”之前或之后,则用“ x = 1 y = 2”替换匹配的字符串“ y = 2”。我正在尝试以下

line="hello x=7 y=2"
m = re.search(r"((?<=x=\d\s)|(?<!x=\d\s))y=2", line)
if m:
    s = "x=1 " + m.group(0)
    line = re.sub(m.group(0), s, line)
    print line

我得到的输出为 hello x = 7 x = 1 y = 2 ,与我的预期输出不同: hello x = 1 y = 2

>

如何获取包括后向表达式在内的整个模式作为匹配字符串?这样可以解决我的问题。

m.group(0) always print y=1, and m.group(1) prints nothing

我希望它具有整个字符串“ x = 7 y = 1”以使替换正常工作

2 个答案:

答案 0 :(得分:1)

因此,基本上,如果一行中有y=2替换或位于前面的x=定义之前?如果是这样,我建议您更改算法以做到这一点:

  1. 如果搜索y=2为真,则
  2. 如果对x=[0-9]的搜索为真,请替换为x=1;
  3. 否则,将y=2替换为x=1 y=2(为了进行优化,您可以存储和使用y=2的初始搜索结果。)

答案 1 :(得分:1)

我认为您不需要后向模式来执行此操作。所有工作都是将y=2x=\d y=2替换为x=1 y=2,对吗?

line="hello x=7 y=2"
re.sub(r'(x=\d\s)?y=2', 'x=1 y=2', line)