這個問題在這里已經有了答案: 在 Python 中使用正則運算式為單詞添加引號 (3 個回答) 2 天前關閉。
這個想法是為字串串列中的所有字串添加引號。
嘗試了下一個:
import re
input_str='[abc, bca]'
output_str=re.sub(r',(\w*)', r',"\1"', input_str)
print(output_str)
回傳:
# [abc,"" bca]
預期輸出可能如下所示:
# ["abc", "bca"]
是否可以調整此正則運算式以獲得所需的輸出?
uj5u.com熱心網友回復:
您希望在逗號和開括號后匹配,并且希望保留間距,因此您需要允許并捕獲要保留的內容,以便可以重復使用。您還想 用于您的\w量詞,因為\w*將在字符之間進行匹配。
更新后的正則運算式可能如下所示:
import re
input_str='[abc, bca]'
output_str=re.sub(r'([\[,])(\s*)(\w )', r'\1\2"\3"', input_str)
# ^^^^^^^ Matches and captures open bracket or comma
# ^^^^^ Matches and captures any spaces after bracket/comma
# ^^^^^ Matches and captures at least one word character
print(output_str)
以使用更復雜的構造為代價(使正則運算式對其他正則運算式語法的可移植性降低),您可以使用環視斷言來避免某些捕獲,這些斷言斷言字符的存在而不將它們包含在被替換的字串中:
output_str=re.sub(r'(?<=[\[,])(\s*)(\w )', r'\1"\2"', input_str)
其中描述括號或逗號的固定寬度模式是通過后視斷言完成的,將其從匹配中排除并避免將其包含在替換字串中。
uj5u.com熱心網友回復:
您可以使用此代碼:
import re
input_str='[abc, bca]'
print (['"' s '"' for s in re.findall(r'\w (?=[,\]])', input_str)])
輸出:
['"abc"', '"bca"']
此代碼使用正則運算式\w (?=[,\]])進行匹配。此正則運算式匹配后跟逗號或的單詞]。
forloop 回圈遍歷從回傳的陣列,findall并用 包裹每個元素"。
uj5u.com熱心網友回復:
與其嘗試匹配大括號和逗號,不如使用re.sub查找所有單詞,并將它們替換為引號中的單詞:
import re
input_str='[abc, bca]'
re.sub(r'(\w )', r'"\1"', input_str)
# '["abc", "bca"]'
如果你想要一個真正的 python list,那么你可以把它包裝在json決議器中:
import json
json.loads(re.sub(r'(\w )', r'"\1"', input_str))
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/367109.html
上一篇:用R變數的值替換字串的特定部分
