Python 标记列表上的正则表达式/全局表达式,而不是字符串
因此,我有一个令牌列表,为了简单起见,我们可以假设它是一个字符串列表:Python 标记列表上的正则表达式/全局表达式,而不是字符串,python,regex,glob,Python,Regex,Glob,因此,我有一个令牌列表,为了简单起见,我们可以假设它是一个字符串列表: ["hello", "world", "this", "is", "some", "interesting", "input"] 我希望能够编写一个模式,理想情况下它看起来像一个正则表达式,并给我一个正则表达式引擎的完整功能,但是如果我只有glob样式的通配符,那也很好 因此,如果我有一个模式(使用想象中的语法,以$开头的东西被命名为通配符),比如: 我希望能够在上面的输入上运行它,查看它是否匹配,并能够获得$part1的
["hello", "world", "this", "is", "some", "interesting", "input"]
我希望能够编写一个模式,理想情况下它看起来像一个正则表达式,并给我一个正则表达式引擎的完整功能,但是如果我只有glob样式的通配符,那也很好
因此,如果我有一个模式(使用想象中的语法,以$
开头的东西被命名为通配符),比如:
我希望能够在上面的输入上运行它,查看它是否匹配,并能够获得$part1
的[“世界”,“这”,“是”]
,以及$part2
的[“有趣”,“输入”]
我可以将我的令牌列表编码为字符串,将我的模式令牌列表编译成一个普通的旧regex模式,然后只使用一个regex。但我的令牌列表实际上并不包含字符串,它包含具有我不想丢失的元数据的令牌对象
我目前的方向是在NFA上实现我自己的自定义正则表达式引擎,这肯定会奏效,但这相当复杂
在Python中有没有更简单的方法来实现这一点?让我们假设您的令牌列表是:
['a', 'b', 'cx', 'cy']
您可以轻松地将其映射到字符串中:
'<0><1><2><3>'
“”
那么你就有了这样的模式:
['a', '<token>*', 'c.*']
['a'、'*'、'c.']
您可以将模式映射到正则表达式:
'<0>(.*)<(2|3)>'
“(*)”
2 | 3
可以通过“|”找到。join(str(i)表示i,如果重新匹配('c.*,token'),则枚举(tokens)中的token))
。(或根据需要使用更快的索引/缓存。)
然后对正则表达式使用任何函数。我最后只编写了NFA。它很有效。为什么简单的方法不起作用?只是好奇。
'<0>(.*)<(2|3)>'