Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.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
Regex 正则表达式以联接5位数字组_Regex - Fatal编程技术网

Regex 正则表达式以联接5位数字组

Regex 正则表达式以联接5位数字组,regex,Regex,我试图从字符串中提取10位电话号码。在某些情况下,数字在2或5位后用空格分隔。如何合并这些数字以获得10位数的最终计数 mystr='(R) 98198 38466 (some Text) 9702977470' import re re.findall('\d+' , mystr) 关闭,但不正确: ['98198', '38466', '9702977470'] 预期成果: ['9819838466', '9702977470'] 我可以为concat'98198'和'38466'编

我试图从字符串中提取10位电话号码。在某些情况下,数字在2或5位后用空格分隔。如何合并这些数字以获得10位数的最终计数

mystr='(R) 98198 38466 (some Text) 9702977470'

import re
re.findall('\d+' , mystr)
关闭,但不正确:

['98198', '38466', '9702977470']
预期成果:

['9819838466', '9702977470']

我可以为concat'98198'和'38466'编写python代码,但我想知道正则表达式是否可以用于此操作。

您可以先删除非数字

>>> mydigits = re.sub(r'\D', '', mystr)
>>> mydigits
'98198384669702977470'
>>> re.findall(r'.{10}', mydigits)
['9819838466', '9702977470']

您可以先删除非数字

>>> mydigits = re.sub(r'\D', '', mystr)
>>> mydigits
'98198384669702977470'
>>> re.findall(r'.{10}', mydigits)
['9819838466', '9702977470']

如果所有分隔符都是一个字符长,那么这将起作用

>>> re.findall(r'(?:\d.?)+\d', mystr)
['98198 38466', '9702977470']
当然,这包括匹配中的非数字分隔符。regex
findall
只能返回输入字符串的一些片段。它不能修改它们

如果这是一个问题,那么之后很容易移除

>>> [re.sub(r'\D', '', s) for s in _]
['9819838466', '9702977470']

如果所有分隔符都是一个字符长,那么这将起作用

>>> re.findall(r'(?:\d.?)+\d', mystr)
['98198 38466', '9702977470']
当然,这包括匹配中的非数字分隔符。regex
findall
只能返回输入字符串的一些片段。它不能修改它们

如果这是一个问题,那么之后很容易移除

>>> [re.sub(r'\D', '', s) for s in _]
['9819838466', '9702977470']

我怀疑单靠正则表达式模式能否实现这一点。可能只是使用一个模式获取10+个数字和空格,然后通过编程清除其空格。只要您确定手机号码之间有文字,以下模式就可以使用。
[\d]{10,}

我怀疑单靠正则表达式模式能否实现它。可能只是使用一个模式获取10+个数字和空格,然后通过编程清除其空格。只要您确定手机号码之间有文字,以下模式就可以使用。
[\d]{10,}

在某些情况下,数字在2或5位后用空格分隔

您可以使用正则表达式:

例如,此正则表达式将匹配所有这些:

01 23456789
01234 56789
0123456789
在某些情况下,数字在2或5位后用空格分隔

您可以使用正则表达式:

例如,此正则表达式将匹配所有这些:

01 23456789
01234 56789
0123456789

这要归功于评论员杰森哈珀

\d{2} ?\d{3} ?\d{5}

这要归功于评论员杰森哈珀

\d{2} ?\d{3} ?\d{5}

请尝试
\d{2}?\d{3}?\d{5}
在第二位或第五位数字后添加可选空格。@jasonharper您能将此评论作为答案发布吗?虽然其他答案都有效,但可读性更强,更容易理解。请尝试
\d{2}?\d{3}?\d{5}
查找第二位或第五位数字后的可选空格。@jasonharper您能将此评论作为答案发布吗?虽然其他的答案都是有效的,但这更具可读性,也更容易理解。