Python 重新拆分为拆分表达式,并保留delimeters/包含括号

Python 重新拆分为拆分表达式,并保留delimeters/包含括号,python,regex,python-3.x,Python,Regex,Python 3.x,我正在处理多个类似这样的表达式 C=>E或A+B+C=>D或A+BC和(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.sp

我正在处理多个类似这样的表达式
C=>E
A+B+C=>D
A+BC
(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”]

我对正则表达式不是很在行,所以我需要一个足够健壮的正则表达式来帮助我一次性完成这项工作。如果不可能使用正则表达式,至少有一种更好的方法。

您只需要一个捕获组:

import re

print(re.split(r"'(\^|=>)", "A+B+C=>D"))
# ['A+B+C', '=>', 'D']
你可以用

re.findall(r'\([^()]*\)|<?=>|[-+/*|^]|\w+', s)

re.findall(r'\([^()]*\)\124;第一个例子是错误的,
re.split(r'\=>,“A+B+C=>D”)
返回
['A+B+C','D']
,而不是
[“A+B”,“D”
尝试
re.findall(r'\([^()]*\)|@WiktorStribiżew你是一个救生员。我将尝试解释你在这个正则表达式中所做的事情,但谢谢你。@SASSYżROG查看并提示如何增强下面的模式。感谢这解决了我的第一个问题,我的第二个问题现在是在使用运算符拆分时不触及括号内的内容,例如
(a+B)^C=>e
[”(A+B)”,“^”,“C”,“=>”,“E”]
@SASSY_ROG
re.split(r'(^ ^ |=>),”(A+B)^C=>E')
但我不知道你为什么坚持使用
re.split
太好了,上面的一条评论告诉我使用了
re.findall()