给出了需要从下面的文本中提取的多个模式。
import re
s = 'This text2 11contains 4 numbers and 6 words.'
字符串
例如,假设我需要分别提取单词和数字,我可以:
>>> re.findall(r'[a-zA-Z]+', s)
['This', 'text', 'contains', 'numbers', 'and', 'words']
型
和/或
>>> re.findall(r'\d+', s)
['2', '11', '4', '6']
型
但是,如果我想在一个表达式中合并这两个表达式,我会这样做:
>>> re.findall(r'[a-zA-z]+|\d+', s)
['This', 'text', '2', '11', 'contains', '4', 'numbers', 'and', '6', 'words']
型
但我需要分辨出哪个属于哪个模式。在这种情况下,我可以简单地检查isnumeric()
,并相应地对每个模式进行分组,但随着模式变得越来越复杂,没有办法分辨,除非单独提取每个模式,如果需要单独提取大量文档和模式,这最终将变得效率低下。获取匹配类型的方法是什么?对于上面的示例,它将类似于:
['This', 'text', '2', '11', 'contains', '4', 'numbers', 'and', '6', 'words']
['word', 'word', 'number', ...]
型
或者每个组[0, 0, 1, 1, ...]
简单列举。
3条答案
按热度按时间ki1q1bka1#
使用命名组匹配:
个字符
hgtggwj02#
您可以使用组,如命名组。例如,对于
re.finditer()
和re.Match.groupdict()
:个字符
jk9hmnmh3#
使用组,类似于以下内容:
字符串