在正则表达式替换中匹配最长字符串的保证方法

HKT*_*Lee 3 python regex

由于某种原因,我需要通过使用替换从某个任意列表生成正则表达式。

假设用户可以输入"cat","dog"并且"!@[]",它将生成"cat|dog|!@\\{\\}"。

问题是,当多个输入包含公共前缀时,我可以使 re 匹配最长的术语吗?

例如:

"god", "godspeed","godzilla"将生成"god|godspeed|godzilla"

如果有多个匹配项,我希望它匹配最长的术语。那是匹配"godspeed"而不是"god"如果我用来re.finditer()匹配字符串"godspeeding"

我在 Python 3.7.1 中尝试过,它似乎根据正则表达式中的顺序报告匹配项。如果这总是正确的,我可以在将输入转换为正则表达式之前对输入(wrt 长度)进行排序。

但是,我找不到有关此行为的任何文档,并且不确定将来是否会改变。

Fel*_*lix 5

来自文档:

扫描目标字符串时,RE 由“|”分隔 从左到右进行尝试。当一种模式完全匹配时,该分支就会被接受。

这是指定的行为,将来很可能不会改变。您应该可以对长度进行排序并随后执行正则表达式匹配。

这回答了你的问题了吗?