Python正则表达式拆分

2024-03-29 11:00:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我正试着把一个字符串分成一个列表。它几乎可以工作,但由于某种原因,它在开头和结尾都会产生一个额外的空白列表元素

line = "A12B1234123456  Misc text"
re.split('^([A-H])(\d{2})?([A-Z])?(\d{4})?(\d{6})?\t(.*)$', line)
['', 'A', '12', 'B', '1234', '123456', 'Misc text', '']

我在期待['A', '12', 'B', '1234', '123456', 'Misc text'] 为什么会发生这种情况,我怎样才能防止呢


Tags: 字符串textre元素列表结尾line情况
2条回答

因为您基本上使用的是split,它使用regex作为分隔符,将字符串分成几个部分

我认为您需要的是匹配正则表达式中选定的组:

line = "A12B1234123456\tMisc text"
m = re.match('^([A-H])(\d{2})?([A-Z])?(\d{4})?(\d{6})?\t(.*)$', line)
m.groups()
>>> ('A', '12', 'B', '1234', '123456', 'Misc text')

我想这是你期待的清单

正则表达式是正确的,但不要使用re.split打印匹配项

使用re.findall打印所有匹配项(捕获的组):

>>> print re.findall(r'([A-H])(\d{2})?([A-Z])?(\d{4})?(\d{6})?\t(.*)$', line)[0]
('A', '12', 'B', '1234', '123456', 'Misc text')

相关问题 更多 >