Python中的部分字符串匹配
我有一个部分的ID是 A00-A09
。像 A01
、A01.01
、A02
一直到 A09.09
这样的内容都应该归类到这个ID下面。我该如何在Python中实现这个呢?目前我只能匹配完全相同的字符串。
4 个回答
0
你可以使用 startswith()
和 endswith()
来进行部分匹配。假设完整的ID格式总是像 X12.Y34
这样的,每一部分都是一个字母加两个数字,中间用 .
或 -
(或者其他任何字符)分隔:
>>> 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'
如果输入有时候是小写的,你还可以把它转换成 大写字母。
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)
1
使用 re.match()
来检查这个。下面是一个例子:
import re
section_id = "A01.09"
if re.match("^A0[0-9](\.0[0-9])?$", section_id):
print "yes"
在这里,正则表达式的意思是 A0X
是必须的,而 .0X
是可选的。X
的范围是从 0-9
。
1
你可以使用 []
和 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')
输出结果:
[]