如何在(networkx)图中查找被描述为正则表达式的路径?

2024-09-22 18:17:07 发布

您现在位置:Python中文网/ 问答频道 /正文

给出一个有向的可能循环的networkx图。我想搜索被描述为正则表达式的路径。正则表达式不会描述循环。例如:

nodeA, [^nodeB]* [nodeC|nodeD]

在英语中,这应该对应于:我正在寻找一条以nodeA开头的路径,后跟0个、一个或多个不是nodeB的节点,最后该路径应该以nodeC或nodeD结尾。在

我想查找的示例路径是:

  • nodeA->;nodeX->;nodeC
  • nodeA->;nodeX->;nodeD->;nodeD
  • nodeA->;nodeC
  • 。。。在

我在SO上找到了this相关帖子。然而,它是关于从两个节点之间的所有可能路径创建一个regex。在我的例子中,我提供了一个regex并希望获得相应的路径。在

我不完整(可能还不够)的方法是:

  1. 将regex描述的路径拆分为从单个固定节点开始到单个固定节点结束的部分。单个固定节点表示some_node(即没有特殊的regex字符,如[]、^、*、+等)。在
  2. 使用常规networkx功能搜索此路径
  3. 如果找到了一个路径,我会逐节点遍历它并查看“当前”regex部分(从regex的开头开始)。在
  4. 如果当前regex部分是[^some_node],那么我检查当前节点是否等于该值。如果相等,我中断,如果不相等,则推进节点和正则表达式部分。在
  5. 如果当前regex部分是一个some\u节点,即节点some_node必须存在,那么我检查当前节点是否等于该节点。如果是的话,我推进节点和正则表达式。如果没有,我只推进节点。在

在为其他情况编写更多代码之前,例如[some_node]*[some_node]+我想检查是否已经存在该任务的某些代码或算法。在

对于这个任务,是否有任何读到使用模块/lib/示例代码之类的代码?
如果没有,你知道一个现有的算法“regex-to-path search in graph”?
如果没有,你能概述一下算法吗?


Tags: 代码gt路径networkx算法node示例节点