Python中的部分字符串匹配

2 投票
4 回答
16082 浏览
提问于 2025-04-18 00:59

我有一个部分的ID是 A00-A09。像 A01A01.01A02 一直到 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')

输出结果:

[]

撰写回答