我是一個完全陌生的Regex新手。
我需要將不同格式的美國電話號碼決議為3個字串:區號(沒有'()'),接下來的3個數字,最后4個數字。沒有'-'。
我還需要拒絕(訊息錯誤):
916-111-1111(區號后有'-')。 (916)111 -1111 ('-'前有空白) ( 916)111-1111 (區號內的任何空格) - (916 ) - 必須拒絕 也必須拒絕
(a56)111-1111(區號內的任何非數字)
區號缺少'()'
它應該可以:'(916)111-1111'(除上述之外的任何空格)
這是我的詞組:
^s*(?(d{3})[)-] [s]*? (d{3})[-]? (d{4})s*$
這花了我兩天時間。
它沒有失敗916-111-1111(區號后有'-'的可用性)。我相信還有一些其他的不足之處。
我將非常感謝您的幫助。甚至是提示。
有效的:
' (916) 111-1111'
'(916)111-1111'
' (916) 111-1111'
無效:
'916-111-1111' - no () or '-' after area code
'(916)111 -1111' - 在'-'前沒有空格
'( 916)111-1111' - 沒有空格在()內
'(abc) 111-11i1'因為有非數字。
uj5u.com熱心網友回復:
你可以這樣做:
span class="hljs-keyword">import re
r = r'((d{3}))s*? (d{3})-(d{4,5})'/span>
l = ['(916) 111-11111', '(916)111-1111', ' (916) 111-1111', '916-111-1111', '(916)111 -1111', '( 916)111-1111', '( abc) 111-11i1']
print([re.findall(r, x) for x in l] )
# [[('916', '111', '111111')], [('916', '111', '1111')], [('916', '111', '1111')], [], [], []] /span>
uj5u.com熱心網友回復:
你可以把這個詞組簡化為:
"(d{1,3})D*(d{3})D*(d{4})"/span>
代碼:
import re
if __name__ == '__main__'/span>:
phone_numbers = ["916-111-1111", "(916)111 -1111", "( 916)111-1111", "- (916 )111-1111", "(a56)111-1111"]
for phone_number_str in phone_numbers:
結果 = re.findall("(d{1,3})D*(d{3})D*(d{4})"/span>, phone_number_str)
if 0 == len(results)。
print(f" [main] FAIL: {phone_number_str}")
print(results[0] )
結果:
('916'/span>, '111'/span>, '1111'/span>)
('916'/span>, '111', '1111')
('916'/span>, '111', '1111')
('916'/span>, '111', '1111')
('56'/span>, '111'/span>, '1111'/span>)
注意:D代表非數字字符。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/307538.html
標籤:
