重新拆分以拆分表达式并保留分号/包括方括号

时间:2019-04-22 10:07:04

标签: python regex python-3.x

我正在处理如下所示的多个表达式 C=>EA+B+C=>DA+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不太满意,因此我需要一个足够强大的正则表达式帮助,以便一次性完成。如果使用正则表达式无法实现,那么至少是一种更好的方法。

2 个答案:

答案 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

请参见regex demoRegulex graph

enter image description here

详细信息

  • re.findall(r'\([^()]*\)|<?=>|[-+/*|^]|\w+', s) -带括号的子字符串
  • \([^()]*\)-或
  • |-一个<?=><=>
  • =>-或
  • |-字符类中定义的字符之一(要匹配任何非单词和非空白字符,可以将其替换为[-+/*|^]
  • [\w\s]-或
  • |-字符字符,1个或更多(您可以根据需要进行调整:\w+将匹配1个或更多大写字母,[A-Z]+将匹配1个以上字母)