Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 标记列表上的正则表达式/全局表达式,而不是字符串_Python_Regex_Glob - Fatal编程技术网

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)>'