【发布时间】:2018-12-09 11:31:50
【问题描述】:
所以我有一个标记列表,为了简单起见,我们可以假设它是一个字符串列表:
["hello", "world", "this", "is", "some", "interesting", "input"]
我希望能够编写一个模式,它在理想情况下看起来像一个正则表达式,并为我提供了一个正则表达式引擎的完整功能,但如果我只有 glob 样式的通配符也可以。
因此,如果我有一个模式(具有想象的语法,其中以 $ 开头的事物被命名为通配符),如下所示:
["hello", "$part1", "some", "$part2"]
我希望能够在上面的输入上运行它,查看它是否匹配,并且能够为 $part1 获取 ["world", "this", "is"] 和为 $part2 获取 ["interesting", "input"]。
我可以将我的令牌列表编码为一个字符串,将我的模式令牌列表编译成一个普通的旧正则表达式模式,然后只使用一个正则表达式。但我的令牌列表实际上并不包含字符串,它包含具有我不想丢失的元数据的令牌对象。
我目前的方向是在 NFA 上按照Russ Cox's article 实现我自己的自定义正则表达式引擎,这肯定会奏效,但这相当复杂。
有没有更简单的方法在 Python 中完成此任务?
【问题讨论】:
-
我最终只写了 NFA。效果很好。
-
为什么更简单的方法不起作用?只是好奇。