【发布时间】:2018-01-05 21:08:23
【问题描述】:
我有一个 python 列表,每个字符串都是以下 4 个可能的选项之一(当然名称会不同):
Mr: Smith\n
Mr: Smith; John\n
Smith\n
Smith; John\n
我希望将这些更正为:
Mr,Smith,fname\n
Mr,Smith,John\n
title,Smith,fname\n
title,Smith,John\n
用 4 个 re.sub() 就够简单了:
with open ("path/to/file",'r') as fileset:
dataset = fileset.readlines()
for item in dataset:
dataset = [item.strip() for item in dataset] #removes some misc. white noise
item = re.sub((.*):\W(.*);\W,r'\g<1>'+','+r'\g<2>'+',',item)
item = re.sub((.*);\W(.*),'title,'+r'\g<1>'+','+r'\g<2>',item)
item = re.sub((.*):\W(.*),r'\g<1>'+','+r'\g<2>'+',fname',item)
item = re.sub((*.),'title,'+r'\g<1>'+',fname',item)
虽然这对于我正在使用的数据集来说很好,但我希望提高效率。
有没有一个单一的操作可以简化这个过程?
如果我忘记了报价或类似内容,请见谅;我现在不在我的工作站,我知道我已经删除了换行符 (\n)。
谢谢你,
【问题讨论】:
-
提前编译正则表达式会有所帮助,因为它可以缓存它生成的状态机。反向引用也可能很慢。
-
问题:你想用你的数据集很好地做什么?你想写一个新的(更正的)文件吗?
-
for item in dataset:的逻辑是什么?你有一个双重嵌套循环。 -
@Beefster:编译正则表达式的差异通常可以忽略不计,因为字符串正则表达式无论如何都会被编译并存储在缓存中。
-
好吧,我将插入数据库,但这只是几个步骤。短期内我将使用这些信息从各种网页中获取数据。
标签: python regex optimization