2016-03-31 50 views
3

假设我有一个字符串'ad>ad>ad>>ad',我想在'>'(而不是'>>'字符)上对此进行分割。刚拿起的正则表达式,想知道是否有一种方法(特殊字符),为了将所匹配的表达的特定部分,而不是对整个匹配的表达式分割,例如正则表达式可能是:匹配正则表达式的一部分上的分割字符串(python)

re.split('[^>]>[^>]', 'ad>ad>ad>>ad')

你可以得到它在括号中的字符分裂[^>](>)[^>]

回答

1

您需要使用lookarounds:

re.split(r'(?<!>)>(?!>)', 'ad>ad>ad>>ad') 

regex demo

(?<!>)>(?!>)模式的匹配不与一个<前面(由于负回顾后(?<!>))一>,这是不接着是<(由于负向预测(?!>))。

由于lookarounds不消耗字符(不像否定(而且正面)的字符类,像[^>]),我们只能在没有“感人”的周围符号的象征<匹配和拆分。

1

\b>\b

这种尝试将检查单>非空白字符包围。由于问题中的字符串是连续的字符流,检查字边界与\b是最简单的方法。

Regex101 Demo

+0

如果什么单'>'被封闭用空格,或有只是右边或左边的空间?然后,它不会工作。 –

+0

@WiktorStribiżew:这不在OP的规范中。如果是这种情况,那么OP应该指定所有这样的**案例**。 –

+0

我把另一个标记为正确,因为它反映了我之后的完全匹配(但没有消费,这对我来说是新的。) – dpdenton

相关问题