2016-05-24 14 views
1

我想使用多个分隔符+/,.;分割下列值。所有其他标志不应作为分隔符使用。如何在基于多个分隔符的分割中添加约束?

例如,

CAP.44,45+62(400) 
e.morgan,44+32/78 

我写了下面的代码:

import re 
data['COUNT'] = data['STRING_VALS'].apply(lambda x: len(re.findall(r'[+/,.; ]+', x))) 

的问题是,.可能有异常。在下列掩码_.___的情况下,不应将其用作分隔符。因此,如果在.之前有一个字符,并且在.之后有任何数量的字符,则不应该拆分_.___

如何这样的光罩式约束添加到上面给出的代码?

+0

'a.b.c'怎么样?它应该分成多少部分? –

+0

@AlexHall:然后它应该被分成3部分。 – JoeBlack

+0

这不是我所期望的。所以你只想避免在点上分裂,只有在之前有一个非点的字符,并且多于一个之后? a.bb.c.dd是否应该分成'a.bb'和'c.dd'? –

回答

1

可以使用负回顾后和负前瞻。 喜欢的东西:

r'[\s+/,;]|(?<!_)[.](?!___)'

这样的:

p = re.compile(r'[\s+/,;]|(?<!_)[.](?!___)') re.split(p, 'CAP.44,45+62(400)')

回报:['CAP', '44', '45', '62(400)']

re.split(p, '_.___') 回报:['_.___']

+0

谢谢。我测试了它。一个小问题是像'tyt-21-47-rut'这样的字符串长度为3而不是4。 – JoeBlack

+0

对不起,我不完全明白你的意思。 – Proghero

相关问题