Python - 转义||分割具有多个分隔符的字符串时

时间:2016-04-09 12:34:13

标签: python regex split

我正在尝试使用re.split在a && b || c && d || e&&上分割||之类的字符串。我知道你可以通过re.split("a | b")拥有多个分隔符,但我不知道如何实现这一目标:re.split("&& | ||")。我尝试使用re.split("&& | \\|\\|")来逃避管道但是这不起作用。

如何正确逃避这一点?

4 个答案:

答案 0 :(得分:4)

您需要转义 |,因为它具有特殊含义:

>>> import re
>>> s = "a && b || c && d || e"
>>> re.split(r"&&|\|\|", s)
['a ', ' b ', ' c ', ' d ', ' e']

并且,还要处理分隔符周围的空格:

>>> re.split(r"\s(?:&&|\|\|)\s", s)
['a', 'b', 'c', 'd', 'e']

\s与空格字符匹配,(?:...)gitdiffcore

答案 1 :(得分:1)

如果你想分成单个元素,

str.translate 可能会完成这项工作:

s = "a && b || c && d || e"

print(s.translate(None,"&|").split())

哪会给你:

['a', 'b', 'c', 'd', 'e']

或者替换double ||与&&然后拆分:

s = "a && b || c && d || e"

print(s.replace(" || "," && ").split(" && "))

或者如果你想保留间距,只需要s.replace("||","&&").split("&&"),无论你想要什么,你都可以使用上面的一些变体或者与 str.strip 结合使用。

答案 2 :(得分:0)

此正则表达式是否符合您的需求?

import re
r = re.compile("(?:&&|\|\|)")
r.split("a && b || c && d || e")

结果:

['a ', ' b ', ' c ', ' d ', ' e']

答案 3 :(得分:0)

试试这个

data = "a && b || c && d || e"
import re
spl = re.split("(?:\|\||&&)",data)
print spl

或者使用regex否定查找全部

import re
data = "a && b || c && d || e"
data2 = re.findall("[^&|]{2}",data)
print data2