2014-04-02 242 views
1

我有一個部分ID A00-A09。任何類似A01,A01.01,A02A09.09應該是 分類在此部分ID。我如何在Python中做到這一點?目前,我只能匹配具有確切字符的字符串。python中的部分字符串匹配

+0

檢查're'模塊,正則表達式 – sshashank124

+0

@ sshashank124你的意思是're'模塊? –

+0

是're'模塊。 – Nilesh

回答

0

切割的部分ID和比較:

sid = "A00-A09" 

def under_sid(ssid, sid): 
    sid_start, sid_end = sid.split("-") 
    return ssid[:3] >= sid_start and ssid[:3] <= sid_end 

for i in ["A01", "A01.01", "A02", "A09.09"]: 
    assert under_sid(i, sid) 

for i in ["B01", "A22.01", "A93", "A19.09"]: 
    assert not under_sid(i, sid) 
0

您可以使用[]與re模塊:

re.findall('A0[0-9].0[0-9]|A0[0-9]','A01') 

輸出:

['A01'] 

非次數:

re.findall('A0[0-9].0[0-9]|A0[0-9]','A11') 

輸出:

[] 
0

可以使用startswith()endswith()做部分匹配。在X12.Y34假設全ID始終是 - 每一個部分是一個字母和兩個數字,由.-分離(或任何字符):

>>> id = 'A03.A07' 
>>> section_id = id[:3] 
>>> section_id 
'A03' 
>>> id.startswith('A03') 
True 
>>> id.startswith('A07') 
False # so won't match with the subsection. 
>>> sub_section_id = id[-3:] 
>>> sub_section_id 
'A07' 

而且你可以將其轉換爲uppercase如果輸入有時會小寫。

1

使用re.match()來檢查這一點。這裏是一個例子:

import re 

section_id = "A01.09" 
if re.match("^A0[0-9](\.0[0-9])?$", section_id): 
    print "yes" 

這裏正則表達式意味着A0X是強制性的,並且.0X是可選的。 X0-9