我有这样的代码
a = "*abc*bbc"
a.split("*")#['','abc','bbc']
#i need ["*","abc","*","bbc"]
a = "abc*bbc"
a.split("*")#['abc','bbc']
#i need ["abc","*","bbc"]
我应该如何使用Python的split函数、正则表达式或partition方法获取带有分隔符的列表?我正在使用Python 2.7,Windows系统。
我有这样的代码
a = "*abc*bbc"
a.split("*")#['','abc','bbc']
#i need ["*","abc","*","bbc"]
a = "abc*bbc"
a.split("*")#['abc','bbc']
#i need ["abc","*","bbc"]
您需要使用正则表达式,将分隔符作为一个组,并忽略空字符串,如下所示
>>> [item for item in re.split(r"(\*)", "abc*bbc") if item]
['abc', '*', 'bbc']
>>> [item for item in re.split(r"(\*)", "*abc*bbc") if item]
['*', 'abc', '*', 'bbc']
注意1:您需要使用\
对*
进行转义,因为正则表达式会对*
有特殊含义。所以,您需要告诉正则表达式引擎*
应该被视为普通字符。
注意2:当您在字符串的开头或结尾分隔符处拆分字符串时,将得到一个空字符串。请查看此问题了解其原因。
import re
x="*abc*bbc"
print [x for x in re.split(r"(\*)",x) if x]
您需要使用re.split
函数并对分隔符进行分组。
或者
x="*abc*bbc"
print re.findall(r"[^*]+|\*",x)
re.findall
进行匹配。使用partition()
函数;
a = "abc*bbc"
print (a.partition("*"))
>>>
('abc', '*', 'bbc')
>>>
filter(None, re.split('([*])', '*abc*bbc'))
- hwndfilter
更受青睐 :) - thefourtheye