Python 更高效的正则表达式
我正在解析大约200000个文档(每个文档约1-3gb),以使用regex删除所有非字母数字字符,并匹配一些古老代码的输入格式。每个单词/数字都需要用Python 更高效的正则表达式,python,regex,re,Python,Regex,Re,我正在解析大约200000个文档(每个文档约1-3gb),以使用regex删除所有非字母数字字符,并匹配一些古老代码的输入格式。每个单词/数字都需要用分隔 我把它们分成了不同的部分,这样就可以了,但我一直试图将这些表达式合并成一个,但都没有成功 我怎样才能把这些碎片组合在一起 组合表达式的考虑因素是什么 def clean_document(raw_input): no_more_etf = re.sub(r'[^\x00-\x7F]+', '', raw_input) no_m
分隔
我把它们分成了不同的部分,这样就可以了,但我一直试图将这些表达式合并成一个,但都没有成功
我怎样才能把这些碎片组合在一起
组合表达式的考虑因素是什么
def clean_document(raw_input):
no_more_etf = re.sub(r'[^\x00-\x7F]+', '', raw_input)
no_more_non_utf = re.sub(r'[\000-\011\013-\037]', '', no_more_etf)
no_more_spaces = re.sub('\s+', '_', no_more_non_utf.strip())
almost_there = re.sub('[^0-9a-zA-Z]+', '_', no_more_spaces)
clean_string = almost_there.lower()
return clean_string
示例字符串:
”“车辆在哪里我是一群隨機人物 "国家“=>”35214“细化”=>“3”我的书在哪里“我是一个脏数组对象”=>“类别ID”=>“2,5,7,8”“数据大小单位”=>,“交付格式”=>“1,4”“交付方法”=>“1,2”,“价格货币”=>“1”,“试用货币”=>“1”,“类别”=>“2,10,19”,“交付增长单位®”=>,“试用期单位”=>“6”,私の本はどこですか “收集时间单位”=>,“策略”=>“2,3,4,6”,“处理时间单位”=>,“交付频率单位”=>,“订阅持续时间单位”=>“6”®®交付车辆的GPS地点访问”
您可以使用标准字符串的翻译方法执行所有这些替换(除了.strip())(请参见string.translate和string.maketrans)
如果您不想使用translate,那么可以在函数之外准备替换模式的编译版本,并在re.sub()调用中使用编译版本而不是多个也会使事情变得更快。那些具有相同替换模式的re.sub
s通常可以被OR。re.sub(r'[^\x00-\x7F]+','',raw_input)
和re.sub(r'[\000-\011\013-\037],'',无更多etf)
可以写成re.sub(r'[^\x00-\x7F]+\124000-\013-\037,'',raw-u input)
。另外,“[^0-9a-zA-Z]+”
匹配空格,因此您的无更多空格=re.sub(“\s+”,“\u2+”,无更多非utf.strip())
是多余的。您可以将is重写为def clean\u文档(原始输入):返回re.sub(r'[^0-9a-zA-Z]+',“\u2+”,re.sub(r'[^\x00-\ux7f]+\013-”,原始输入)
Ah ok,我的错误是语法错误,试图用一种组合模式进行两种不同的替换。谢谢!