我有一個包含如下資料的字串:
str1 = "[2.4],[5],[2.54],[4],[3.36],[4.46],[3.36],[4],[3.63],[4.86],[4],[4.63]"
我想用 with 替換每個第二次迭代,"],["所以","它看起來像這樣:
str2 = "[2.4,5],[2.54,4],[3.36,4.46],[3.36,4],[3.63,4.86],[4,4.63]"
這是我到目前為止:
str1 = "[2.4],[5],[2.54],[4],[3.36],[4.46],[3.36],[4],[3.63],[4.86],[4],[4.63]"
s2 = re.sub(r"],\[", ',', str1)
print(s2)
我試圖解決這個問題:
(.*?],\[){2}
但這似乎并沒有給我帶來預期的結果。
我嘗試使用回圈,但在使用我在此處找到的示例代碼后,我只設法只替換了第二次出現并且什么都沒有。代碼是:
import re
def replacenth(string, sub, wanted, n):
where = [m.start() for m in re.finditer(sub, string)][n-1]
before = string[:where]
after = string[where:]
after = after.replace(sub, wanted, 1)
newString = before after
print(newString)
For these variables:
string = 'ababababababababab'
sub = 'ab'
wanted = 'CD'
n = 5
謝謝你。
uj5u.com熱心網友回復:
您可以使用
import re
from itertools import count
str1 = "[2.4],[5],[2.54],[4],[3.36],[4.46],[3.36],[4],[3.63],[4.86],[4],[4.63]"
c = count(0)
print( re.sub(r"],\[", lambda x: "," if next(c) % 2 == 0 else x.group(), str1) )
# => [2.4,5],[2.54,4],[3.36,4.46],[3.36,4],[3.63,4.86],[4,4.63]
請參閱Python 演示。
正則運算式是相同的],\[,它匹配文字],[文本。
初始化計數器,其c = count(0) 值在用作替換引數的 lambda 運算式內的每次匹配時遞增。當計數器為偶數時,匹配用逗號替換,否則保持原樣。
uj5u.com熱心網友回復:
您可以捕獲要保留的部分。
(\[[^]] )- 捕獲[和所有內容,但不包括下一個]],\[- 匹配],[([^]] )- 捕獲所有內容,但不包括下一個]
>>> re.sub(r"(\[[^]] )],\[([^]] )", r"\1,\2", str1)
'[2.4,5],[2.54,4],[3.36,4.46],[3.36,4],[3.63,4.86],[4,4.63]'
uj5u.com熱心網友回復:
這是另一種僅使用正則運算式的方法:
import re
text = '[2.4],[5],[2.54],[4],[3.36],[4.46],[3.36],[4],[3.63],[4.86],[4],[4.63]'
print(re.sub(r'],\[(.*?])', r',\1', text))
輸出:
[2.4,5],[2.54,4],[3.36,4.46],[3.36,4],[3.63,4.86],[4,4.63]
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/434513.html
上一篇:按空間拆分列
