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

时间:2018-12-10 19:21:05

标签: python regex

出于某种原因,我需要使用交替从任意列表中生成正则表达式。

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

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

例如:

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

如果有多个匹配项,我希望它匹配最长的期限。如果我使用"godspeed"来匹配字符串"god"

,那将匹配re.finditer()而不是"godspeeding"

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

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

1 个答案:

答案 0 :(得分:1)

来自docs

  

在扫描目标字符串时,RE用“ |”分隔从左到右尝试。当一个模式完全匹配时,该分支被接受。

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

这能回答您的问题吗?