2013-12-16 22 views
2

我有一堆不同數字的代碼,偶爾插入一個字母來代表我的數據的不同修飾符。這是一個示例代碼:「01a-09B」。我想要做的是:Python正則表達式:從「01a」中提取「a」

  1. 提取數範圍從上面的代碼

  2. 知道,如果字母「A」或「B」連接到一個數字(即[[1」一個 「],[9,」 b「]]

我試圖做到這一點使用python的重新包裝我的代碼如下:

>>>> print re.match(r'\D','01a-09B',re.M) 
None 

的PROBL em是我無法使用此代碼匹配非數字字符;我得到None返回。

謝謝大家。

回答

5
>>> m = re.search(r'(\d+)([A-Za-z]+)?\-(\d+)([A-Za-z]+)?', '01a-09B') 
>>> m.groups() 
('01', 'a', '09', 'B') 
>>> m = re.search(r'(\d+)([A-Za-z]+)?\-(\d+)([A-Za-z]+)?', '01-09B') 
>>> m.groups() 
('01', None, '09', 'B') 
2

.match匹配字符串的開頭。您可能希望.search()匹配字符串中的任何位置。

+0

'打印re.search(R '^ \ d', '01A-09B',re.M被)'仍返回'None' – mh00h

+1

'打印re.search(R '(\ d)', '01a-09B',re.M).group(0)' - >'a' –

+1

@ mh00h因爲're.search(r'^ \ D')'等價於're.match(r'\ D ')'因爲'^'將它限制在字符串的開頭。你的信件不在字符串的開頭,所以你爲什麼試圖在那裏綁定比賽? – Amber