将findall正则表达式转换为finditer

时间:2017-01-06 14:25:35

标签: python regex python-2.7

我有以下正则表达式

'\D*(\d{13,19})\D*'

我想从以下文字中提取数字:

Data:
4532394639182605   sadada 4716759060363635 assasasas
  dsdsd 4539072249615668 jdhsjhdj
ABCD

当我使用此正则表达式时,请致电:

regex = re.compile('\D*(\d{13,19})\D*')
a = regex.finditer(text)
b = regex.findall(text) #Yield correct result

结果不同 - 我想要findall的结果。我知道finditer匹配组。但是如何将我的findall正则表达式转换为findite正则表达式?

我需要使用finditer这样的结果,例如使用findall

TL;博士

我想要提取数字而不是其他字符。

1 个答案:

答案 0 :(得分:2)

finditer返回匹配对象,可以使用.group方法从中提取组。这就是人们通常使用正则表达式的方式,findall直接返回组中的字符串或元组是不常见的。

import re

text = '''Data:
4532394639182605   sadada 4716759060363635 assasasas
  dsdsd 4539072249615668 jdhsjhdj
ABCD'''

regex = re.compile('\D*(\d{13,19})\D*')
for match in regex.finditer(text):
    print(match.group(1))