python与multi-reg匹配并花费大量时间?

python与multi-reg匹配并花费大量时间?,python,Python,我有许多标题和标题注册规则列表。 我需要使用每个注册匹配每个瓷砖 如果注册表规则列表的长度为512,则花费我50秒 为什么会这样 我尝试将注册规则列表拆分为多个列表,每个都有一些建议: Python解释器缓存了有限数量的正则表达式,因此一旦超过该数量,就需要重新编译每个正则表达式。这将导致严重的性能损失,尽管缓存正则表达式的数量(据我所知)接近100而不是500。最好提前显式编译所有正则表达式 您对re.match()的使用很奇怪,可能是因为您没有完全按照自己的想法去做。如果改用re.sear

我有许多标题和标题注册规则列表。 我需要使用每个注册匹配每个瓷砖

如果注册表规则列表的长度为512,则花费我50秒

为什么会这样


我尝试将注册规则列表拆分为多个列表,每个都有一些建议:

  • Python解释器缓存了有限数量的正则表达式,因此一旦超过该数量,就需要重新编译每个正则表达式。这将导致严重的性能损失,尽管缓存正则表达式的数量(据我所知)接近100而不是500。最好提前显式编译所有正则表达式

  • 您对
    re.match()
    的使用很奇怪,可能是因为您没有完全按照自己的想法去做。如果改用
    re.search()
    ,则不需要前导的
    *
    (因为只有
    re.match()
    将正则表达式锚定到字符串的开头)。您永远不需要尾部的
    *
    。此外,
    *
    仅当字符串开头和要匹配的部分之间没有换行符时才起作用。如果您的正则表达式包含未分组的替换,则会出现意外的结果

    例如,如果
    reg
    a | b
    ,则您的正则表达式
    *a | b.*
    将匹配一个字符串,该字符串在任意数量的非换行字符后包含
    a
    ,或以
    b
    开头


  • 对不起,我几乎听不懂“reg”是指“regex”?您正试图对每个标题比较和匹配(许多)多个正则表达式。首先,没有必要使用
    re.match('.'.'+Reg+'.'.'.'.',
    ,这是非常低效的,只需使用
    re.search(Reg,
    )即可。接下来,给我们至少10个正则表达式示例和10个标题示例。如果正则表达式不重叠,或者具有一些共享的基前缀,那么我们可以轻松地将它们划分出来(想象一下二叉树),在前几个字符上进行拆分。这将极大地提高您的能力。但您需要给我们提供真实的示例数据。否则,这个问题将被否决并关闭。此外,每个字符串可能会命中多个正则表达式。您是否关心我们必须为每个匹配正则表达式设置的场景?而且不清楚哪个变量对应于哪个变量“注册规则列表”,是
    RegList
    还是
    RegListList
    ?无论是哪一个,注册规则编号512是否有不同之处?或者无论顺序如何,结果都是相同的?完整的可运行示例会有所帮助。
     for MatchTitle in TitleList:
         for RegList in RegListList:
            for Reg in RegList:
                if re.match('.*' +Reg + '.*', MatchTitle):
                    ThisReg= True #some prosess