如何将正则表达式匹配作为整个字符串返回?

时间:2015-10-06 18:43:03

标签: python regex

我想匹配电话号码,并返回整个电话号码但只返回数字。这是一个例子:

(555)-555-5555
555.555.5555

但我想使用正则表达式只返回:

5555555555

但是,出于某种原因,我无法获得要返回的数字:

import re
phone_number='(555)-555-5555'

regex = re.compile('[0-9]')
r = regex.search(phone_number)
regex.match(phone_number)
print r.groups()

但由于某种原因它只打印一个空元组?我在这里失踪的显而易见的事情是什么?感谢。

3 个答案:

答案 0 :(得分:5)

由于拥有任何捕获组,您的结果为空,请参阅documentation了解详情。

您应该将其更改为group(),现在您将获得第一个数字作为匹配。但这是你想要的东西,因为引擎在遇到非数字字符时会停止并将匹配返回到那里。

您只需删除所有非数字字符:

re.sub('[^0-9]', '', '(555)-555-5555')

取消范围0-9,因此正则表达式匹配数字的任何内容,然后用空字符串替换它。

答案 1 :(得分:3)

您可以使用str.joinstr.isdigit

进行正规表达
s = "(555)-555-5555"

print("".join([ch for ch in s if ch.isdigit()]))
5555555555

如果你打印r.group()你会得到一些输出,但是使用搜索不是找到所有匹配的正确方法,搜索将返回第一个匹配,因为你只查找一个数字,它将返回5 ,即使'[0-9]+')与一个或多个匹配,您仍然只能获得第一组连续数字,即上面字符串中的555。使用"".join(r.findall(s))会获得数字,但显然可以使用str.digit完成。

如果你知道潜在的非数字字符,那么str.translate将是最好的方法:

s = "(555)-555-5555"

print(s.translate(None,"()-."))
5555555555

答案 2 :(得分:1)

最简单的方法是:

>>> import re
>>> s = "(555)-555-5555"
>>> x = re.sub(r"\D+", r"", s)
>>> x
'5555555555'