【问题标题】:Regex to extract name from list正则表达式从列表中提取名称
【发布时间】:2014-12-08 15:40:32
【问题描述】:

我正在处理一个文本文件 (620KB),其中包含一个 ID# 列表,后跟用逗号分隔的全名。 我用于此的工作正则表达式是

^([A-Z]{3}\d+)\s+([^,\s]+)

我还想捕获名字和中间名首字母(名字和 MI 之间的空格分隔符)。 我尝试这样做:

^([A-Z]{3}\d+)\s+([^,\s]+([\D])+)

这可行,但我想删除在输出文件上生成的新换行符(我会将两个输出文件导入数据库(可能是 Access),我不想捕获新换行符, 还有是否有更好的方法来编写正则表达式?

完整代码:

import re

source = open('source.txt')
ticket_list = open('ticket_list.txt', 'w')
id_list = open('id_list.txt', 'w')

for lines in source:
    m = re.search('^([A-Z]{3}\d+)\s+([^\s]+([\D+])+)', lines)
    if m:
        x = m.group()
        print('Ticket: ' + x)
        ticket_list.write(x + "\n")
ticket_list = open('First.txt', 'r')
for lines in ticket_list:
    y = re.search('^(\d+)\s+([^\s]+([\D+])+)', lines)
    if y:
        z = y.group()
        print ('ID: ' + z)
        id_list.write(z + "\n")
source.close()
ticket_list.close()
id_list.close()

样本数据: 来源:

ABC1000033830 SMITH, Z 
100000012 Davis, Franl R 
200000655 Gest, Baalio 
DEF4528942681 PACO, BETH 
300000233 Theo, David Alex 
400000012 Torres, Francisco B. 
ABC1200045682 Mo, AHMED 
DEF1000006753 LUGO, G TO 
ABC1200123123 de la Rosa, Maria E.

【问题讨论】:

  • 从文件上传一些输入​​数据和所需的输出。
  • 您是否考虑过专门针对名字和中间名首字母的第二个或替代捕获组正则表达式?此外,如果您提供要使用的测试数据,这个问题会更容易回答。不过,我怀疑使用替代捕获组会起作用。
  • 如果你的源文件是逗号分隔的,为什么不使用 csv 模块。然后只需将第二列附加到您的姓名列表中。似乎更简单,恕我直言。
  • 不是每个人的名字都写成一样的,即使使用首字母也是如此。 (内)著名例子:L. Ron Hubbard、F. Scott Fitzgerald、M. Night Shyamalan、L. Sprague de Camp。
  • @LuisFelipe,您提供的示例数据是您的正则表达式应该搜索的格式吗?我怀疑不是,因为您的模式明确搜索新行的开头。请确保您的源样本格式相同。这对于模式的准确性至关重要。

标签: python regex database list python-3.x


【解决方案1】:

根据您正在处理的换行类型,简单的正向前瞻可能会纠正您在结果中捕获换行符的模式。这是由 RegexBuddy 4.2.0 生成的,适用于您的所有测试数据。

if re.search(r"^([A-Z]{3}\d+)\s+([^,\s]+([\D])+)(?=$)", subject, re.IGNORECASE | re.MULTILINE):
    # Successful match
else:
    # Match attempt failed

基本上,正向先行确保在模式结束后直接有一个换行符(在本例中为行尾)。它将匹配,但不会捕获实际的行尾。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-20
    • 2019-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多