假设我有电话号码:
310-5984
我想捕获电话号码中的所有数字,即3105984
。我可以使用两个捕获组来完成此操作:
>>> re.match(r'(?P<num_1>\d+)-(?P<num_2>\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'}
但它也消耗了分隔符。如何“使用”分隔符但不将其捕获到组中?或者正则表达式不可能做到这一点?
最佳答案
您可以尝试将 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
获取的所有捕获组。在本例中,我们只是将它们组合起来。
关于python - 可以排除捕获组中的某些内容吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58775248/