2014-10-29 93 views
0

我想知道是否有針對我現在有一個更好的Python的正則表達式的解決方案忽略字符?目前,我的代碼是:如何使用Python正則表達式

import re 

n = '+17021234567' 
m = '7021234567' 
match = re.search(r'(?:\+1)?(\d{10})', n) 
match.group(1) 

match = re.search(r'(?:\+1)?(\d{10})', m) 
match.group(1) 

代碼的目標是隻提取10位pH值#如果它有一個領先的+1與否。目前它的工作原理,但我想知道是否有一種方法可以撥打match.group()來獲得10位數的ph#而不需要撥打match.group(1)

回答

2

不,沒有使用捕獲組,不可能通過re.match函數。由於re.match試圖從頭開始匹配輸入字符串。但它可以通過re.search

>>> re.search(r'\d{10}$', n).group() 
'7021234567' 
>>> re.search(r'\d{10}$', m).group() 
'7021234567' 
+0

我不認爲OP意味着re.match但是變量匹配他們使用 – Totem 2014-10-30 00:03:46

1

可能要只捕獲數字使用 '\ D' 的數字

n = '+17021234567' 
re.findall('\d{10}$',n) 
1

使用這種模式

(?<=^|\+1)\d{10}$ 

Demo

(?<=     look behind to see if there is: 
^      the beginning of the string 
|      OR 
    \+1      '+1' 
)      end of look-behind 
\d{10}     digits (0-9) (10 times) 
$      before an optional \n, and the end of the string