将lookbehind模式与匹配的正则表达式搜索模式分组以作为整体替换

问题描述 投票:0回答:2

我必须搜索并替换具有以下条件的模式:如果在一行中找到字符串“y = 2”,并且如果它前面或前面没有“x =”,那么替换,匹配的字符串“y = 2 “with”x = 1 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

如何将包含lookbehind表达式的整个模式作为匹配的字符串?这将解决我的问题。

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

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

python regex lookbehind
2个回答
1
投票

我不认为你需要lookbehind模式来做到这一点。所有的工作是将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) 

1
投票

所以,基本上,如果一行有y=2替换或前置x=定义?如果是这样,我建议你改变算法来做到这一点:

  1. 如果搜索y=2为真,那么
  2. 如果搜索x=[0-9]为真,则替换为x=1;
  3. 否则,用y=2替换x=1 y=2(为了优化,您可以存储和使用y=2的初始搜索结果。)
© www.soinside.com 2019 - 2024. All rights reserved.