我正在尝试从字符串中提取10位数的电话号码。在某些情况下,数字在2或5位后用空格分隔。如何合并这些数字以获得最终的10位数?
mystr='(R) 98198 38466 (some Text) 9702977470'
import re
re.findall('\d+' , mystr)
关闭,但不正确:
['98198', '38466', '9702977470']
预期结果:
['9819838466', '9702977470']
我可以编写python代码来连接' 98198'和' 38466',但我想知道正则表达式是否可用于此。
答案 0 :(得分:1)
您可以先删除非数字。
barackObama owns fido
fido isA dog
fido livesIn theWhiteHouse
fido hasFurColour white
答案 1 :(得分:1)
如果所有分隔符都是一个字符长,则可以使用。
>>> re.findall(r'(?:\d.?)+\d', mystr)
['98198 38466', '9702977470']
当然,这包括匹配中的非数字分隔符。正则表达式findall
只能返回输入字符串的一些切片。它不能修改它们。
如果这是一个问题,这些很容易删除。
>>> [re.sub(r'\D', '', s) for s in _]
['9819838466', '9702977470']
答案 2 :(得分:1)
在某些情况下,数字在2位或5位后用空格分隔。
您可以使用正则表达式:
\b(?:\d{2}\s?\d{3}|\d{5}\s)\d{5}\b
例如,这个正则表达式将匹配所有这些:
01 23456789
01234 56789
0123456789
答案 3 :(得分:0)
我怀疑你是否只能通过正则表达式来实现它。可能只是使用一个模式来获得10+个数字和空格,然后以编程方式清理其空格。只要您确定手机之间有文字,就可以使用下面的模式。
[\d ]{10,}
答案 4 :(得分:0)
信用转到评论者jsonharper
\d{2} ?\d{3} ?\d{5}