上下文
假设我有一组完全不同的字符串,尽管它们可能共享起始序列,即apple, banana, bpple, canana, applf
。
我最好如何使用正则表达式来匹配一个字符串,该字符串可以包含 其中一个字符串的左起始子集?例如,apple
和banana
显然会匹配。 banan
,ba
,bp
和c
也是如此。 b
和appl
不明确(因此不应匹配)。
在动态构建的正则表达式(慢速和丑陋)中使用生成的字符类,我可以为此创建匹配引擎。然而,当我尝试时,我最终完成了Python / pick-your-language中的大部分匹配逻辑和完全抛弃正则表达式。是否有一些简洁的方法使这个工作与正则表达式?
执行此操作的最简单方法可能是将每个可能的字符串(apple, banana
等)分解为一个列表并按顺序匹配每个字符串,但好奇心和顽固让我想知道是否有某种方式单独使用正则表达式进行处理。
TL; DR:
有没有办法,使用正则表达式来匹配:当且仅当提供的字符串是唯一和左开始 只有一个< / strong>一组给定的字符串?
答案 0 :(得分:1)
不要使用正则表达式。您要求trie中的树叶。
如果你必须使用正则表达式,那么它们可以像这样构建:
(a(p(p(le?)?)?)?|b(a(n(a(na?)?)?)?)? ...)
编写一些构造这个的代码很容易,但是你无法找到实际匹配的内容(例如,用户输入'app' - 你可能想知道这匹配'apple')。此外,修改此项以确保不超过一个匹配是非常麻烦的。构造正则表达式的代码将比创建一个trie要复杂得多(事实上,你可能需要创建一个等同于trie的东西来创建正则表达式,你要求的)。