正则表达式加入5位数组

时间:2018-05-08 02:30:35

标签: regex

我正在尝试从字符串中提取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',但我想知道正则表达式是否可用于此。

5 个答案:

答案 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}