如何在python中使用正则表达式从文件中提取数据?

时间:2013-03-28 03:48:31

标签: python regex

我有一个文件,在那个emailid,phoneno和我的dateofbirth就在那里。在python中使用正则表达式,如何逐个查找3个字段?所需的输出类似于

Emailid: x@gmail.com
Phoneno: 1234567890
dateofbirth: xx-xx-xx

我知道如何单独找到这些字段。但我不知道如何一次找到3个。下面的代码片段显示了如何从文件中找到emailid。此代码输出类似于

Emaildid: x@gmail.com

..............................

import sys,re

pattern=r'''(?P<emailid>[a-zA-Z\.]*\@[a-zA-Z]*\.c[a-zA-Z]*)'''


regobj = re.compile(pattern, re.VERBOSE)

for line in sys.stdin:
  results= regobj.finditer(line)
for result in results:
  sys.stdout.write("%s\n"%result.group('emailid'))

1 个答案:

答案 0 :(得分:1)

您可以使用finditer方法迭代字符串中RE模式的所有非重叠匹配,如下所示:

import sys,re

pattern = re.compile(r'''(?P<emailid>[a-zA-Z.]*@[a-zA-Z]*\.c[a-zA-Z]*).*?(?P<phone>\(?[0-9]{3}\)?[-. ]?[0-9]{3}[-. ]?[0-9]{4}).*?(?P<dob>[0-9]{2}-[0-9]{2}-[0-9]{2})''', re.DOTALL)

for result in pattern.finditer(sys.stdin.read()):
    sys.stdout.write("Emailid: %s\n"%result.group('emailid'))
    sys.stdout.write("Phoneno: %s\n"%result.group('phone'))
    sys.stdout.write("dateofbirth: %s\n"%result.group('dob'))