簡體   English   中英

將后向模式與匹配的正則表達式搜索模式組合在一起以整體替換

[英]Grouping lookbehind pattern along with matching regex search pattern to substitute as a whole

我必須搜索並替換以下條件的模式:如果在一行中找到字符串“ y = 2”,並且如果在字符串之前或不以“ x =”開頭,則替換為匹配的字符串“ y = 2” ,其中“ 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

如何獲取包括后向表達式在內的整個模式作為匹配字符串? 這將解決我的問題。

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

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

因此,基本上,如果一行的y=2替換或位於前面的x=定義之前? 如果是這樣,我建議您更改算法以做到這一點:

  1. 如果搜索y=2為true,則
  2. 如果搜索x=[0-9]為true,則替換為x=1
  3. 否則,將y=2替換為x=1 y=2 (為進行優化,您可以存儲和使用y=2的初始搜索結果。)

我認為您不需要后向模式來執行此操作。 所有工作都是將y=2x=\\dy=2替換為x=1 y=2 ,對嗎?

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM