Python如何用正则表达式匹配@分隔路径的直接子节点
问题描述
树结构采用@分隔的数字字符串存储,字符串从左到右对应树从根节点到叶子节点的路径,相邻分段为父子关系:比如1@2@3@代表1是2的父节点,2是3的父节点,后续层级按这个规则顺延。
现在需要基于给定的节点A的路径字符串,生成对应的正则表达式,仅匹配A的直接子节点路径:
- 两个
@之间的数字支持任意长度 - 当A取值为
'1@2@3@'时,测试用例匹配要求如下:B = '1@2@3@4@':A的直接子节点,需匹配C = '1@2@3@4@5@':A的二级后代节点,不匹配D = '1@2@3@5@':A的直接子节点,需匹配
正则实现方案
正则生成逻辑如下:
- 以节点A的完整路径作为强制前缀,保证待匹配路径从根到A的层级完全一致,前缀前加字符串起始符
^ - 前缀后拼接
\d+@,匹配直接子节点对应的任意长度数字加分隔符@ - 末尾加字符串结束符
$,保证匹配的路径在子节点这层就结束,不会存在更深的层级
针对示例里A='1@2@3@'的场景,最终生成的正则为:
^1@2@3@\d+@$
匹配验证
- 对B路径
1@2@3@4@:前缀完全匹配,后续仅跟4@后到达字符串末尾,符合规则,匹配成功 - 对C路径
1@2@3@4@5@:前缀匹配后还存在5@层级,无法满足末尾结束的要求,匹配失败 - 对D路径
1@2@3@5@:前缀完全匹配,后续仅跟5@后到达字符串末尾,符合规则,匹配成功
通用场景提示:如果节点路径中可能出现正则特殊元字符,生成正则前先对A的路径字符串做正则转义处理即可,当前场景仅包含数字和
@,无需额外转义。
内容的提问来源于stack exchange,提问作者João Duque
相关产品推荐
相关产品推荐

