我正在嘗試匹配出現在英國電話號碼中的重復 3 位數字組。當具有此模式的組中的 3 位數字相同時,我已經可以獲得匹配項:
r'(\d)\1{2}'
例如,當輸入為“07119777777”時,我得到兩個匹配項:
<re.Match object; span=(5, 8), match='777'>
<re.Match object; span=(8, 11), match='777'>
但是,當輸入類似于“07123123123”時,我沒有得到匹配項,因為 3 位數字組中的數字不同。是否有正則運算式模式可以將這些標識為匹配項?
uj5u.com熱心網友回復:
請您嘗試以下操作:
str = "07590759759"
m = re.search(r'(\d{3}).*?(\1).*?(\1)', str)
print(m.groups())
輸出:
('759', '759', '759')
[更新]
回答您的其他問題,我想僅使用正則運算式是不可能的。(可能是,但到目前為止我無法弄清楚。)
這是一種方法:
str = "07590759759012759"
m = re.search(r'(\d{3})((?:.*?\1) )', str)
m1, m2 = m.groups() # m1: first match, m2: remaining sequence of matches
m3 = re.findall(m1, m2) # extract multiple m1's out of m2
print([m1] m3) # concatenate them as a list
輸出:
['075', '075']
輸出可能不是您所期望的,因為上面的代碼輸出了
兩次或多次重復。如果要限制最多三個或更多重復,請將re.search()
行修改為:
m = re.search(r'(\d{3})((?:.*?\1){2,})', str)
然后輸出將是:
['759', '759', '759', '759']
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/398908.html
上一篇:匹配正則運算式組的總長度
