我正在為 SpaCy 預處理文本并嘗試洗掉標點符號,數字之間除外。但是,在某些情況下,當標點符號與數字連接時,它不會被洗掉。您能否建議如何處理這種極端情況?
一個例子:
import re
text = "Fast-charge $ EV ! battery maker StoreDot pulls in $80.7M led led by Vietnam’s VinFast"
preprocessed = re.sub(r'(?<!\d)[%$!.,,;:’“”—-](?!\d)',' ', text)
print(preprocessed)
# Fast charge EV battery maker StoreDot pulls in $80.7M led by Vietnam s VinFast
預期結果:
# Fast charge EV battery maker StoreDot pulls in 80.7M led by Vietnam s VinFast
uj5u.com熱心網友回復:
負lookarounds應該是雙方真實的,這樣就不會匹配$在$80
您可以使用|沒有數字的交替來匹配斷言在左側或右側的字符類的一個字符。
(?<!\d)[%$!.,;:’“”—-]|[%$!.,;:’“”—-](?!\d)
查看正則運算式演示
筆記
有
led led在本例中的字串,和一個led在預期的結果,但我認為這是一個錯字,因為角色職業所無法比擬的led,在字符類中也有一個雙重條目。不確定是否要保留它們,但在替換中使用空格可能會留下雙倍間距,正如您在預期結果中看到的那樣。如果要洗掉它們,可以使用
strip()洗掉前導和尾隨空格,并使用 sub withr"[^\S\n]{2,}"匹配 2 個或多個不帶換行符的空格并將它們替換為單個空格
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/409283.html
標籤:
上一篇:實作此目的的正則運算式:包含字母和數字的字串,包含僅包含數字的字串,排除僅包含字母的字串
下一篇:正則運算式需要很長時間來評估
