Python试图捕获行的中间部分,regex或spli

2024-10-02 18:17:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个文本文件,里面有一些名字、电子邮件和其他东西。我想捕获电子邮件地址。在

我不知道这是分割问题还是正则表达式问题。在

以下是一些采样线:

[name]bill billy [email]bill.billy@hotmail.com [dob]01.01.81
[name]mark hilly [email]mark.hilly@hotmail.com [dob]02.11.80
[name]gill silly [email]gill.silly@hotmail.com [dob]03.12.79

我想做一个循环,打印所有的电子邮件地址。在

谢谢。在


Tags: namecom电子邮件email地址名字mark文本文件
3条回答

您可以将子字符串传递给split,而不仅仅是单个字符,因此:

email = line.partition('[email]')[-1].partition('[')[0].rstrip()

与简单的split解决方案相比,它有一个优势,即它可以在值中包含空格的字段上工作,也可以在顺序不同的行上工作(即使它们的最后一个字段是[email]),等等

概括起来:

^{pr2}$

然而,我认为它仍然比正则表达式解决方案复杂。另外,它一次只能搜索一个字段,而不是一次搜索所有字段(不会使它变得更复杂)。要获得两个字段,您将对每行进行两次解析,如下所示:

for line in data.splitlines():
    print '''{} "babysat" Dan O'Brien on {}'''.format(get_field(line, 'name'), 
                                                      get_field(line, 'dob'))

(当然,我可能误解了DOB字段。)

我会用正则表达式:

import re

data = '''[name]bill billy [email]bill.billy@hotmail.com [dob]01.01.81
[name]mark hilly [email]mark.hilly@hotmail.com [dob]02.11.80
[name]gill silly [email]gill.silly@hotmail.com [dob]03.12.79'''

group_matcher = re.compile(r'\[(.*?)\]([^\[]+)')

for line in data.split('\n'):
    o = dict(group_matcher.findall(line))
    print o['email']
  • \[的字面意思是[。在
  • (.*?)是一个非贪婪的捕获组。它“扩展”以捕获文本。在
  • \]的字面意思是{}
  • (是捕获组的开始。在
  • [^\[]只匹配[。在
  • +重复最后一个模式任意次数。在
  • )关闭捕获组。在
for line in lines:
   print line.split("]")[2].split(" ")[0]

相关问题 更多 >