2024-06-01 20:35:16 发布
网友
假设我有一个字符串s=su3180和(cmg3200或su3210)。我需要将这个字符串拆分成树形图,例如:
X / \ SU 3180 () / - \ CMG 3200 SU 3210
主要目标是显示与和/或拆分的差异,如图中所示。例如,我已经显示了or split,在split之间使用连字符。我不知道该怎么办。欢迎有任何想法!你知道吗
对于字符串的算法处理,我不确定,就这一种情况,你可以从这个简单的表达式开始
([A-Z]+\s+\d+)\s+and\s+\(([A-Z]+\s+\d+)\s+or\s+([A-Z]+\s+\d+)\)
换成类似的东西:
X\n /\\\n \1 ()\n / - \\\n \2 \3
import re regex = r"([A-Z]+\s+\d+)\s+and\s+\(([A-Z]+\s+\d+)\s+or\s+([A-Z]+\s+\d+)\)" string = "SU 3180 and (CMG 3200 or SU 3210)" subst = ' X\\n /\\\\\\n \\1 ()\\n / - \\\\\\n \\2 \\3' print(re.sub(regex, subst, string))
X /\ SU 3180 () / - \ CMG 3200 SU 3210
如果您希望简化/修改/探索表达式,在regex101.com的右上面板中已经对其进行了解释。如果您愿意,还可以在this link中查看它如何与一些示例输入匹配。你知道吗
一个更复杂的表达式可以从(?R)开始检查平衡括号,然后逐层(深度)捕获括号前后的内容,通过for循环传递,并在此基础上设计一些方法逐层打印树,这相当复杂:
(?R)
(?>([^(]*?)\s*([(]([^()]*|(?R))*[)])([^)]*?)\s*)
或者
([^(]*?)\s*([(]([^()]*|(?R))*[)])([^)]*?)\s*
Regular expression to match balanced parentheses
对于字符串的算法处理,我不确定,就这一种情况,你可以从这个简单的表达式开始
换成类似的东西:
测试
输出
如果您希望简化/修改/探索表达式,在regex101.com的右上面板中已经对其进行了解释。如果您愿意,还可以在this link中查看它如何与一些示例输入匹配。你知道吗
一个更复杂的表达式可以从
(?R)
开始检查平衡括号,然后逐层(深度)捕获括号前后的内容,通过for循环传递,并在此基础上设计一些方法逐层打印树,这相当复杂:或者
Demo
参考
Regular expression to match balanced parentheses
相关问题 更多 >
编程相关推荐