python正则表达式在错误的地方分裂

时间:2017-02-27 05:08:04

标签: python regex string python-2.7 split

我有以下正则表达式和输入字符串。

pattern = re.compile(r'\s+(?=[^()|^{}|^<>]*(?:\(|\{|\<|$))')
string = "token1 token2 {a | op (b|c) | d}"
print pattern.split(string)

结果是:["token1","token2","{a | op","(b|c) |d}"]

我希望正则表达式给出以下结果:["token1","token2","{a | op (b|c) | d}"]

3 个答案:

答案 0 :(得分:3)

你可以简单地用这个分开

\s+(?![^{]*\})

参见演示。

https://regex101.com/r/WjQVqZ/1

答案 1 :(得分:3)

string = "token1 token2 {a | op (b|c) | d}"
re.findall(r'\w+|\{.*}',string)

输出:

['token1', 'token2', '{a | op (b|c) | d}']

答案 2 :(得分:0)

与拆分方法一起使用的原始模式是r'\s+(?=[^\}]*(?:\{|$))'

每次遇到空白时,你都希望向前看一个结束的大括号,所以你知道白色空间是否在大括号内 - 除非接下来看到一个开口大括号或字符串的末尾。