Python 正则表达式从列表中提取名称
我正在处理一个620KB的文本文件,它有一个ID列表,后面是用逗号分隔的全名。 我在这里使用的工作正则表达式是Python 正则表达式从列表中提取名称,python,regex,database,list,python-3.x,Python,Regex,Database,List,Python 3.x,我正在处理一个620KB的文本文件,它有一个ID列表,后面是用逗号分隔的全名。 我在这里使用的工作正则表达式是 ^([A-Z]{3}\d+)\s+([^,\s]+) 我还想捕获first和MI之间的名字和中间的初始空格分隔符。 我试着这样做: ^([A-Z]{3}\d+)\s+([^,\s]+([\D])+) 这是可行的,但我想删除在输出文件上生成的新行分隔符。我将把两个输出文件导入一个数据库(可能是Access),我不想捕获新行分隔符,如果还有更好的方法编写正则表达式 完整代码: impo
^([A-Z]{3}\d+)\s+([^,\s]+)
我还想捕获first和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.
根据您正在处理的换行符类型,简单的积极前瞻可能会纠正在结果中捕获换行符的模式。这是由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
基本上,正向前瞻确保在本例中有换行符,即模式结束后的行尾字符。它将匹配,但不会捕获实际的行尾。从文件中上载一些输入数据和所需的输出。您是否考虑过第二个或其他捕获组正则表达式,特别是第一个名称和中间首字母?此外,如果您提供测试数据以供使用,那么这个问题将更容易回答。不过,我怀疑使用另一个捕获组是可行的。如果源文件是逗号分隔的,为什么不使用csv模块呢。然后只需将第二列附加到您的姓名列表中。看起来简单多了,伊姆霍。不是每个人的名字都写得一样,即使是用首字母。在著名的例子中:L.Ron Hubbard,F.Scott Fitzgerald,M.Night Shyamalan,L.Sprague de Camp.@LuisFelipe,您提供的示例数据是您的正则表达式应该搜索的格式吗?我怀疑不是,因为您的模式显式地搜索新行的开头。请确保源样本的格式相同。这对于图案的准确性至关重要。