1 回答

TA貢獻2021條經驗 獲得超8個贊
您可以使用
re.sub(r'\s*(ATK 30)\s*', r' \1 ', text)
請參閱正則表達式演示。
細節
\s*
- 0+ 空格\b
- 單詞邊界(ATK 30)
\1
- 捕獲組 1(通過替換模式的反向引用來引用):ATK 30
\s*
- 0+ 空格
如果您有一個單詞列表并且需要動態構建的模式,請使用
import re
s = "Product desingATK 30Trace back. TheATK 30 is a nice device. "
keywords = ['ATK 30', 'PPK 50', 'HJF12 10']
pattern = fr'\s*({"|".join(sorted(map(re.escape, keywords),key=len,reverse=True))})\s*'
print(pattern) # => \s*(HJF12\ 10|ATK\ 30|PPK\ 50)\s*
print(re.sub(pattern, r' \1 ', s))
# => Product desing ATK 30 Trace back. The ATK 30 is a nice device.
在這里,fr'\s*({"|".join(sorted(map(re.escape, keywords),key=len,reverse=True))})\s*'
執行以下操作:
map(re.escape, keywords)
- 轉義每個關鍵字(以便(
或?
不能干擾任務)sorted(...,key=len,reverse=True)
- 按長度降序排序(第一個選擇總是“獲勝”,所以這是必要的)"|".join(...)
- 創建交替模式。
添加回答
舉報