Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 是否可以排除捕获组中的某些内容?_Python_Regex - Fatal编程技术网

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
,然后自己去掉仪表板。