出于某种原因,我需要使用交替从任意列表中生成正则表达式。
假设用户可以输入"cat"
,"dog"
和"!@[]"
,它将生成"cat|dog|!@\\{\\}"
。
问题是,当多个输入包含公共前缀时,我可以使re匹配最长的期限吗?
例如:
"god"
,"godspeed"
,"godzilla"
将生成"god|godspeed|godzilla"
如果有多个匹配项,我希望它匹配最长的期限。如果我使用"godspeed"
来匹配字符串"god"
re.finditer()
而不是"godspeeding"
我在Python 3.7.1中进行了尝试,似乎它根据正则表达式中的顺序报告匹配项。如果始终如此,我可以在输入(wrt长度)之前进行排序将它们转换为正则表达式。
但是,我找不到有关此行为的任何文档,也不确定将来是否会保持不变。
答案 0 :(得分:1)
来自docs:
在扫描目标字符串时,RE用“ |”分隔从左到右尝试。当一个模式完全匹配时,该分支被接受。
这是指定的行为,将来很可能不会更改。您应该可以对长度进行排序,然后再进行正则表达式匹配。
这能回答您的问题吗?