python - 使用动态分隔符拆分字符串

时间:2015-01-09 23:29:09

标签: python

我有

s = "[[[ab_1]]] bla1 [[[cd_3]]] bla2 "

我想将s分为"bla1""bla2"。问题是,ab_1cd_3是动态文字。它们可以是"letters_numbers"形式的任何形式。

我前所未有地陷入困境..我尝试使用split(),但它变得很难看,因为s可以是一个长字符串,其中包含多个分隔符。

任何pythonic的想法?

4 个答案:

答案 0 :(得分:2)

我想你想使用re.split

类似下面的正则表达式可能会这样做:

In [11]: re.split("\s*\[{3}.*?\]{3}\s*", s)
Out[11]: ['', 'bla1', 'bla2 ']

In [12]: re.split("\s*\[{3}.*?\]{3}\s*", s.strip())[1:]
Out[12]: ['bla1', 'bla2']

答案 1 :(得分:2)

s = "[[[ab_1]]] bla1 [[[cd_3]]] bla2 "

import  re

print(re.findall("(?<=\s)\w+",s))
['bla1', 'bla2']

或者如果你想要包含标点符号:

s = "[[[ab_1]]] bla1 [[[cd_3]]] bla2!"

import re

print(re.findall(r"\s(\w+\S)",s)
['bla1', 'bla2!']

答案 2 :(得分:1)

import re

s = "[[[ab_1]]] bla1 [[[cd_3]]] bla2 "
print filter(bool, re.split('\W', s))

<强>输出:

['ab_1', 'bla1', 'cd_3', 'bla2']

如果你只想要“bla”:

s = "[[[ab_1]] bla1 [[[cd_3]]] bla2 "
print filter(lambda x: re.match('\w+|\s+', x), re.sub('\[.*?\]', ' ', s))

将输出:

bla1   bla2 

答案 3 :(得分:1)

您可以拆分字符串并在列表解析中使用str.isalnum()

>>> [i for i in s.split() if i.isalnum()]
['bla1', 'bla2']