2014-04-02 189 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