我正在处理如下所示的多个表达式
C=>E
或A+B+C=>D
或A+B<=>C
和(F|G)+H=>E
。我正在尝试使用re.split()
拆分=>
或<=>
。此外,我还想沿3个运算符+ | ^
拆分,同时不要碰到括号内的内容。
第一次尝试,我已经尝试过了
re.split(r"<=>|=>", "A+B+C=>D")
但这是问题,它会将A+B+C=>D
之类的行拆分为
["A+B", "D"]
我正在尝试实现
["A+B", "=>", "D"]
还有当我尝试像这样拆分(A+B)|C=>D
时遇到的与运算符有关的问题
re.split(r"\+|=>|<=>|\^|\|", "(A+B)|C=>D")
我明白了
["(A", "B)", "C", "D"]
我正在努力实现
["(A + B)", "|", "C", "=>", "D"]
我对regex不太满意,因此我需要一个足够强大的正则表达式帮助,以便一次性完成。如果使用正则表达式无法实现,那么至少是一种更好的方法。
答案 0 :(得分:1)
您需要的只是一个捕获组:
import re
print(re.split(r"'(\^|=>)", "A+B+C=>D"))
# ['A+B+C', '=>', 'D']
答案 1 :(得分:1)
您可以使用
def find_shortest_path(source, target)
dijkstra(source)
loop.reduce([[], target]) do |(path, u), _|
break path unless u
[
path << u,
(@vertices[u].prev.value if @vertices[u].prev)
]
end
end
详细信息
re.findall(r'\([^()]*\)|<?=>|[-+/*|^]|\w+', s)
-带括号的子字符串\([^()]*\)
-或|
-一个<?=>
或<=>
=>
-或|
-字符类中定义的字符之一(要匹配任何非单词和非空白字符,可以将其替换为[-+/*|^]
)[\w\s]
-或|
-字符字符,1个或更多(您可以根据需要进行调整:\w+
将匹配1个或更多大写字母,[A-Z]+
将匹配1个以上字母)