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