這個問題在這里已經有了答案: 按順序將字串中的正則運算式匹配項替換為串列中的專案 3 個答案 昨天關門。
假設我在 Python 中有以下字串:
s = "Hi, I currently have 2 apples and 3 oranges"
在正則運算式中我們可以做
r = re.findall(r'\d',s)
這會給我們一個包含數字的串列:
["2","3"]
但是,假設我想按照它們在句子中出現的順序使用串列替換這些數字。
new_list = ["4","5"]
并讓新句子說:
“嗨,我現在有4 個蘋果和5 個橘子”
我嘗試執行以下操作:
new_sentence = [re.sub(('\d'),x, s) for x in new_list]
但這給了我:
['Hi, I currently have 4 apples and 4 oranges', 'Hi, I currently have 5 apples and 5 oranges']
這不是我想要的。您如何使用正則運算式按照它們使用串列出現的順序替換值?
uj5u.com熱心網友回復:
您可以從 中創建一個迭代器new_list并將其用于re.sub:
import re
s = "Hi, I currently have 2 apples and 3 oranges"
new_list = ["4", "5"]
new_list_iter = iter(new_list)
out = re.sub(r"\d ", lambda _: next(new_list_iter), s)
print(out)
印刷:
Hi, I currently have 4 apples and 5 oranges
uj5u.com熱心網友回復:
這是另一個解決方案
''.join(map( operator.add,
re.split('\d ', s),
['4','5'] ['']
))
當 map 像這樣接收多個迭代時,它首先將兩個迭代中的第一項作為引數發送給operator.add函式,然后是接下來的兩項,依此類推。我們必須在替換值的末尾添加一個空字串,以使其長度與re.split.
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/454236.html
上一篇:在串列中列印單個字母
