2013-03-28 126 views
-1

我有一个文件,在那个emailid,phoneno和我的日期在那里。在python中使用正则表达式,如何逐个找到3个字段?期望的输出看起来像如何在Python中使用正则表达式从文件中提取数据?

Emailid: [email protected] 
Phoneno: 1234567890 
dateofbirth: xx-xx-xx 

我知道如何单独找到字段。但我不知道如何一次找到3个。下面的代码片段显示了如何从文件中找到emailid。这段代码输出看起来像

Emaildid: [email protected] 

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

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')) 
+0

是否所有三条信息总是一起,在同一行?在这种情况下,您不需要使用一个正则表达式来查找它们,您可以仅分析该行3次。如果它比这更复杂,那么我们需要看到你解析文件的一些例子。 – octern 2013-03-28 04:27:03

+0

现在代码看起来比以前好多了... – lost 2013-03-28 04:38:51

回答

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')) 
+0

@subodh:我在执行代码时遇到了以下错误........ for result.php(pattern.finditer(sys.stdin)): TypeError:expected字符串或缓冲区 – lost 2013-03-28 05:26:33

+0

@ martin-atkins编辑完成后,代码应该没有任何错误地工作。 – SUB0DH 2013-03-29 15:14:24

相关问题