我必须搜索并替换具有以下条件的模式: 如果在一行中找到字符串“ 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”以使替换正常工作
答案 0 :(得分:1)
因此,基本上,如果一行中有y=2
替换或位于前面的x=
定义之前?如果是这样,我建议您更改算法以做到这一点:
y=2
为真,则x=[0-9]
的搜索为真,请替换为x=1
; y=2
替换为x=1 y=2
(为了进行优化,您可以存储和使用y=2
的初始搜索结果。)答案 1 :(得分:1)
我认为您不需要后向模式来执行此操作。所有工作都是将y=2
或x=\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)