![](/img/trans.png)
[英]python regex: extract list elements, each of which matches multiple patterns
[英]Extract all strings from a line excluding multiple regex patterns matches
我有這些正則表達式模式,我用它來從文本中提取特定的字符串。 我正在使用 python3
'\d{2}\/\d{2} '
- 提取日期 dd/mm
'\S+\.\d\d'
- 提取帶 2 位小數的金額
' \d{6} '
- 提取參考編號,6 位數字
現在我想提取提取這些數據后剩下的任何內容(來自示例的示例:-“DUITNOW TRSF XXuu9876 CR ANG BENG KHOON”)。
我應該寫什么樣的正則表達式模式?
示范文本 -
“31/12 DUITNOW TRSF XXuu9876 CR 004085 ANG BENG KHOON 40,000.00 2,059,044.30”
感謝你的幫助。 謝謝
試試這個方法。
import re
s = "31/12 DUITNOW TRSF CR 004085 ANG BENG KHOON 40,000.00 2,059,044.30"
print(s)
s1 = re.sub('\d{2}\/\d{2} ', '', s)
print(s1)
s2 = re.sub('\S+\.\d\d', '', s1)
print(s2)
s3 = re.sub('\d{6}', '', s2)
print(s3)
s3 = 'DUITNOW TRSF CR ANG BENG KHOON'
你可以使用你必須重新re.split
字符串的模式(雖然我已經稍微修改了模式):
import re
p = r'\s*(?:\d{2}\/\d{2}(?!\S)|\S+\.\d\d|(?<!\S)\d{6}(?!\S))\s*'
text = "31/12 DUITNOW TRSF CR 004085 ANG BENG KHOON 40,000.00 2,059,044.30"
print( list(filter(None, re.split(p, text))) )
# => ['DUITNOW TRSF CR', 'ANG BENG KHOON']
print( " ".join(re.split(p, text)).strip() )
# => DUITNOW TRSF CR ANG BENG KHOON
請注意,這些模式被組合成\s*(?:...|...|etc.)\s*
類型的單個模式,即兩端帶有可選空白模式的非捕獲組。 (?<!\S)
和(?!\S)
是空白邊界。
由於字符串開頭或結尾的匹配可能會產生空字符串,並且在連續匹配的情況下,必須從空匹配中過濾結果列表。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.