可能在捕获组中排除某些东西?

时间:2019-11-09 00:16:45

标签: python regex

假设我有一个电话号码:

MANIFEST.in

我想捕获电话号码中的所有号码,即310-5984 。我可以通过两个捕获组来做到这一点:

3105984

可以通过一个捕获组获取完整的号码吗?我尝试做类似的事情:

>>> re.match(r'(?P<num_1>\d+)-(?P<num_2>\d+)', '310-5984').groupdict()
{'num_1': '310', 'num_2': '5984'}

但是它也在消耗分隔符。如何“使用”分隔符而不将其捕获到组中?还是用正则表达式不可能?

1 个答案:

答案 0 :(得分:2)

您可以尝试将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的调用中获得的所有捕获组。在这种情况下,我们只是将它们组合在一起。