问题描述
这里具有挑战性的部分是主题名称可以是分层的,因此 主题名称如下所示
/a/b/f
/a/b/d
/a/c/e
/a/c/f
/a/c/f/t
so I am representing them as a tree which looks as
'$' --> root
/
a
/ \
b c
/ \ / \
f d e f
/
t
我的python类如下
class TopicTreeNode:
def __init__(self,name):
self.name = name
self.childrens = set()
self.subscribed_clients = set()
我通过在树中表示主题来实现它,树中存储了订阅该主题的客户集。
- 我通过获取所有客户端来实现发布操作 通过在我的树中从上到下进行搜索来匹配给定的主题名称 底部。
- 类似的订阅包括向树中添加 客户端(通过创建主题,如果它不存在于树中)
- 类似地,取消订阅涉及从主题节点中删除客户端。
现在具有挑战性的部分是我必须在发布和订阅的主题名称中实现对通配符的支持。 这样我就可以了
/a/* --> all topics whose parent topic is a [/a/b/f,/a/b/d,/a/c/e,/a/c/f,/a/c/f/t]
/a+/f --> all topics whose parent topic is a followed by any topic followed by topic f [/a/b/f,/a/c/f]
解决方法
您可以在re
包的帮助下遍历树并检查主题名称是否与通配符匹配。
示例代码:
import re
nodes = [ '/a/b/f','/a/b/d','/a/c/e','/a/c/f','/a/c/f/t']
for node in nodes:
if re.fullmatch('/a/.*',node):
print('{} matched first case'.format(node))
if re.fullmatch('/a/./f',node):
print('{} matched second case'.format(node))