我有一個將美國電話號碼決議為3個字串的regex。
import re
s = ' 916-2221111 ' # this also works' (916) 222-1111 '
reg_ph = re.match(r'^s*(?(d{3}))? -? *(d{3})-? *-?(d{4})', s)
if reg_ph:
return reg_ph.group()
else:
raise ValueError ('not a valid phone number')
它在數字上完美地作業:
'(916) 222-1111'
' 916-2221111 '
現在,我需要添加一個額外的重碼,以生成一個數字的值錯誤,例如
s = '916 111-2222' #區號和本地號碼之間有空格,并且沒有')'
我試過
reg_ph = re.match(r'^s*(?(d{3}))? s*-? *(d{3})-? *-?(d{4})', s)
reg_ph = re.match(r'^s*(?(d{3})?s*-? *(d{3})-? *-?(d{4})', s)
但不拒絕有關的字串
。我將非常感謝任何想法。我是Regex的新手!
uj5u.com熱心網友回復:
在Python re中,你可以使用一個條件來檢查組1是否有開頭的小括號。
如果是這種情況,則匹配結尾的小括號、可選的空格和3位數字。否則就匹配-和3位數字。
如果你使用re.match,你可以省略^
^s*(()? d (? (1))s*d{3}|-d{3})-? d{4}。
如果你想匹配整個字串和尾部的空白字符:
^s*(()?d (? (1))s*d{3}|-d{3})-? d{4}s*$
在部分地區,該模式匹配:
^字串的開始s*匹配可選擇的空白字符 。
(()?可選組1,匹配(。
d匹配1 數字 。
(?有條件的(1))s*d{3}如果第1組存在,則匹配結尾的)、可選的空白字符和3位數字|或者-?匹配可選的- 。
d{3}匹配3位數字 。
)關閉條件-?d{4}匹配可選的-和4位數字
參見regex演示
例如,在模式中使用捕獲組來獲得數字:
import re
strings = [' (916) 111-2222',' 916-2221111 ', '916 111-2222']
pattern =r's*(()? (d )(? (1))s*(d{3})|-(d{3}))-? (d{4})s*$']
for item in strings:
m=re.match(pattern, item)
if m:
t = tuple(s for s in m. groups() if s is not None and s.isdigit()
print(t)
else:
print("no match for "/span> item)
輸出
('916'/span>, '111'/span>, '2222'/span>)
('916'/span>, '222'/span>, '1111')
不匹配 for 916 111-2222
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/314843.html
標籤:
