我有
s = "[[[ab_1]]] bla1 [[[cd_3]]] bla2 "
我想将s
分为"bla1"
和"bla2"
。问题是,ab_1
和cd_3
是动态文字。它们可以是"letters_numbers"
形式的任何形式。
我前所未有地陷入困境..我尝试使用split()
,但它变得很难看,因为s
可以是一个长字符串,其中包含多个分隔符。
任何pythonic的想法?
答案 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']