我正在处理一个文本文件(620KB),其中包含ID#s列表,后跟用逗号分隔的全名。 我用过的工作正则表达式是
^([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.
答案 0 :(得分:0)
根据您正在处理的线段类型,一个简单的正向前瞻可能会修复捕获结果中的换行符的模式。这是由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
基本上,正向前瞻确保在模式结束后直接存在换行符(在本例中为行尾)。它会匹配,但不会捕获实际的行尾。