使用Python正则表达式捕获具有置换的重复子模式

问题描述 投票:1回答:1

我正在尝试标记由可以以任何顺序出现的子模式组成的字符串。子模式是下划线,字母或数字。例如:

   'ABC_123_DEF_456' would provide ('ABC', '_', '123', '_', 'DEF', '_', '456')

这里是实现的正则表达式,给出了意外的结果:

>>> m = regex.match(r'^((_)|(\d+)|([[:alpha:]]+))+$', 'ABC_123_DEF_456')
>>> m.groups()
('456', '_', '456', 'DEF')

更新:-排列:三个子模式可以按任何顺序出现,例如:

'ABC123__' would provide ('ABC', '123', '_', '_')
python regex tokenize
1个回答
3
投票

您可以使用/([a-z]+|\d+|_)/i将字符串分成数字组,字母字符或单个下划线:

>>> re.findall(r"([a-z]+|\d+|_)", "ABC_123_DEF_456", re.I)
['ABC', '_', '123', '_', 'DEF', '_', '456']
>>> re.findall(r"([a-z]+|\d+|_)", "ABC123__", re.I)
['ABC', '123', '_', '_']
© www.soinside.com 2019 - 2024. All rights reserved.