Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/297.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,我想从文本中提取10或13位数字。数字的格式如下:2442141411或2 442141411或24 42141411或2 442141411。可以存在,也可以不存在。我写了以下正则表达式: reg = r"\d{10}|\d{13}" 但对于2693232837667或269323287767或2693232837667或。。。。。这些类型的输入 第一个输出应为269322373767,第二个输出应为269322377767,第三个输出应为269322373667,这将匹

我想从文本中提取10或13位数字。数字的格式如下:2442141411或2 442141411或24 42141411或2 442141411。可以存在,也可以不存在。我写了以下正则表达式:

reg = r"\d{10}|\d{13}"
但对于
2693232837667
269323287767
2693232837667
或。。。。。这些类型的输入


第一个输出应为
269322373767
,第二个输出应为
269322377767
,第三个输出应为
269322373667
,这将匹配10或13位数字的序列,且存在空白:

(?:\d\s*){10}(?:(?:\d\s*){3})?
但是,如果您只想在数字之间留一个空格:

(?:\d\s?){10}(?:(?:\d\s?){3})?
请注意,如果您的文本还可以包含(例如)12个数字的字符串,并且您不想匹配前10个数字,那么这可能仍然不是您所需要的。例如,匹配此项时:

My phone numbers are 0123 456 789 and 00 98 456 123 789 and my credit card 1234 5678 9012 3456
您可能只想匹配
0123 456 789
00 98 456 123 789
,但不想匹配
1234 5678 9012 3
。因此,您可能需要:

(?<!\d)(?:\d\s*){10}(?:(?:\d\s*){3})?(?!\s*\d)
结果:

['0123 456 789 ', '00 98 456 123 789\n']
['0123 456 789 ', '00 98 456 123 789']

请注意第一个示例如何在结果中包含换行符。

这将匹配10或13位数字的序列,并显示空白:

(?:\d\s*){10}(?:(?:\d\s*){3})?
但是,如果您只想在数字之间留一个空格:

(?:\d\s?){10}(?:(?:\d\s?){3})?
请注意,如果您的文本还可以包含(例如)12个数字的字符串,并且您不想匹配前10个数字,那么这可能仍然不是您所需要的。例如,匹配此项时:

My phone numbers are 0123 456 789 and 00 98 456 123 789 and my credit card 1234 5678 9012 3456
您可能只想匹配
0123 456 789
00 98 456 123 789
,但不想匹配
1234 5678 9012 3
。因此,您可能需要:

(?<!\d)(?:\d\s*){10}(?:(?:\d\s*){3})?(?!\s*\d)
结果:

['0123 456 789 ', '00 98 456 123 789\n']
['0123 456 789 ', '00 98 456 123 789']

请注意第一个示例如何在结果中包含换行符。

您可以将感兴趣的字符串与以下正则表达式匹配,然后删除空格

r'(?<!\d)(?<!\d )(?:(?:\d *){13}|(?:\d *){10})(?<! )(?! ?\d)'
r'(?

(?您可以将感兴趣的字符串与以下正则表达式匹配,之后将删除空格

r'(?<!\d)(?<!\d )(?:(?:\d *){13}|(?:\d *){10})(?<! )(?! ?\d)'
r'(?


(?
但它对…
失败。您能在此处显示所有预期的匹配类型吗?您的文本文件是否包含
作为分隔符?您在“是否可以存在”中遗漏了一些重要内容文本中没有分隔符。
。为了澄清,您希望提取包含10或13位数字的字符串,然后删除空格?
但它对…无效。
您可以在此处显示所有预期的匹配类型吗?您的文本文件是否包含作为分隔符的
?您在中遗漏了一些重要内容“可以存在也可以不存在。”文本中没有
分隔符。为了澄清,您想提取包含10或13位数字的字符串,然后删除空格?第一个正则表达式有几个问题,一个是它跨越换行符。@CarySwoveland如果您想避免换行符匹配,可以用
[]替换
\s
并且它将只匹配解决一个问题的空格,但是您的正则表达式匹配字符串
“12345678901213”
“12345678901213456789”中的
"
。要求字符串的长度精确到10或13个字符是问题的核心。@CarySwoveland读到最后,这就是最后一个示例所解决的问题。例如,“my regex”与此不匹配,只有第一个示例与之匹配,因为它试图说明如何解决匹配该数字的基本问题。我不理解。s第二个正则表达式与问题中给出的13位示例之一的
“26 9 32 2 3 8 376 67”
不匹配。不是吗?。第一个正则表达式有几个问题,一个是它跨越换行符。@CarySwoveland如果要避免换行符匹配,可以用
\s
替换为
[]
它将只匹配解决一个问题的空格,但您的正则表达式匹配字符串
中的
12345678901213
“12345678901213456789”
。要求字符串的长度精确到10或13个字符是问题的核心。@CarySwoveland读到最后,这就是最后一个示例所解决的问题。例如,“my regex”与此不匹配,只有第一个示例与之匹配,因为它试图说明如何解决匹配该数字的基本问题。我不理解。s第二个正则表达式不匹配,例如,
“2 6 9 32 2 3 8 376 67”
,这是问题中给出的13位示例之一。不是吗?本打算在我的上解决这个问题(被叫走了),但我知道你已经涵盖了它。本打算在我的上解决这个问题(被叫走了),但我知道你已经涵盖了它。