Python 更高效的正则表达式

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

我正在解析大约200000个文档(每个文档约1-3gb),以使用regex删除所有非字母数字字符,并匹配一些古老代码的输入格式。每个单词/数字都需要用
分隔

我把它们分成了不同的部分,这样就可以了,但我一直试图将这些表达式合并成一个,但都没有成功

我怎样才能把这些碎片组合在一起

组合表达式的考虑因素是什么

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,我的错误是语法错误,试图用一种组合模式进行两种不同的替换。谢谢!