在 Python 正则表达式中捕获具有排列的重复子模式
Capturing repeating sub-patterns with permutations in Python regex
我正在尝试标记一个由可以以任何顺序出现的子模式组成的字符串。
子模式是下划线、字母或数字。例如:
'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', '_', '_')
您可以使用 /([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', '_', '_']
我正在尝试标记一个由可以以任何顺序出现的子模式组成的字符串。 子模式是下划线、字母或数字。例如:
'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', '_', '_')
您可以使用 /([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', '_', '_']