0

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

我已将它们分成单独的部分,因此它可以工作,但我一直试图将表达式组合成一个,但没有成功。

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

组合表达式有哪些注意事项?

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

示例字符串: '"where is the Vehicles 我是一群隨機人物 "countries"=>"35,214" "refinement"=>"3" 我的书在哪里"I\'m a dirty array object"=>"" "category_ids"=>"2,5,7,8" "data_size_units"=>"", "delivery_formats"=>"1,4" "delivery_® ® ®methods"=>"1,2", "price_currencies"=>"1" , "trial_currencies"=>"1", "categories"=>"2,10 ,19", "Delivery_growth_units ® ® ®"=>"", "trial_duration_units"=>"6", 私の本はどこですか "collection_time_units"=>"", "strategies"=>"2,3 , 4,6", "processing_time_units"=>"", "delivery_frequency_units" =>"", "subscription_duration_units "=>"6" ® ® ® ģ ģ ģ - GPS Place-Visits for Delivery Vehicles'

4

1 回答 1

1

您可以使用标准字符串的 translate 方法执行所有这些替换(.strip() 除外)(请参阅 string.translate 和 string.maketrans https://docs.python.org/2/library/string.html)。

如果您不想使用翻译,您将受益于在函数之外准备替换模式的编译版本并在 re.sub() 调用中使用编译版本。同样使用单个 re.sub() 而不是多个 re.sub() 也会使事情变得更快。

于 2020-04-20T14:12:11.213 回答