将lookbehind模式与匹配的正则表达式搜索模式分组以作为整体替换
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将lookbehind模式与匹配的正则表达式搜索模式分组以作为整体替换相关的知识,希望对你有一定的参考价值。
我必须搜索并替换具有以下条件的模式:如果在一行中找到字符串“y = 2”,并且如果它前面或前面没有“x =”,那么替换,匹配的字符串“y = 2 “with”x = 1 y = 2“。我正在尝试以下内容
line="hello x=7 y=2"
m = re.search(r"((?<=x=ds)|(?<!x=ds))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”以使替换正常工作
答案
我不认为你需要lookbehind模式来做到这一点。所有的工作是将y=2
或x=d y=2
替换为x=1 y=2
,对吗?
line="hello x=7 y=2"
re.sub(r'(x=ds)?y=2', 'x=1 y=2', line)
另一答案
所以,基本上,如果一行有y=2
替换或前置x=
定义?如果是这样,我建议你改变算法来做到这一点:
- 如果搜索
y=2
为真,那么 - 如果搜索
x=[0-9]
为真,则替换为x=1
; - 否则,用
y=2
替换x=1 y=2
(为了优化,您可以存储和使用y=2
的初始搜索结果。)
以上是关于将lookbehind模式与匹配的正则表达式搜索模式分组以作为整体替换的主要内容,如果未能解决你的问题,请参考以下文章