Python 是否可以排除捕获组中的某些内容?
假设我有一个电话号码:Python 是否可以排除捕获组中的某些内容?,python,regex,Python,Regex,假设我有一个电话号码: 310-5984 我想捕获电话号码中的所有号码,即,3105984。我可以使用两个捕获组来完成此操作: >>> re.match(r'(?P<num_1>\d+)-(?P<num_2>\d+)', '310-5984').groupdict() {'num_1': '310', 'num_2': '5984'} 重新匹配(r'(?P\d+)-(?P\d+),'310-5984').groupdict() {'num_1':'3
310-5984
我想捕获电话号码中的所有号码,即,3105984
。我可以使用两个捕获组来完成此操作:
>>> re.match(r'(?P<num_1>\d+)-(?P<num_2>\d+)', '310-5984').groupdict()
{'num_1': '310', 'num_2': '5984'}
重新匹配(r'(?P\d+)-(?P\d+),'310-5984').groupdict()
{'num_1':'310','num_2':'5984'}
是否可以通过一个捕获组获取完整的数字?我试过这样做:
>>> re.match(r'(?P<num>(?P<num_1>\d+)(?:-)(?P<num_2>\d+))', '310-5984').groupdict()
{'num': '310-5984', 'num_1': '310', 'num_2': '5984'}
关于匹配(r'(?P(?P\d+)(:-)(?P\d+)),'310-5984')。groupdict()
{'num':'310-5984','num_1':'310','num_2':'5984'}
但它也消耗了分离器。如何“使用”分隔符但不在组中捕获它?或者使用regex是不可能的?您可以尝试使用带有回调函数的
re.sub
,例如
def callback(m):
return m.group(1) + m.group(2)
phone = "310-5984"
number = re.sub('\\b(\d+)-(\d+)\\b', callback, phone)
print(number)
这张照片是:
3105984
回调函数允许您执行一个附加步骤,涉及从调用
re.sub
获得的所有捕获组。在这种情况下,我们只是将它们结合起来。很好!我只是把它放在一个lambda函数中,它工作得很好:re.sub('(\d+)-(\d+),lambda match:match.group(1)+match.group(2),'310-5984')
这是一个非常好的单行程序。我以后可能会自己使用它。顺便问一下,如果不使用替换,上面的正则表达式组concatention是不可能的吗?i、 例如,是否可以使用纯正则表达式捕获3105984
?否,不在单个捕获组中。您需要使用回调(我的答案),或者只需匹配310-5984
,然后自己去掉仪表板。