如何在Python中拆分字符串并使用分隔符获取结果?

4

我有这样的代码

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系统。
3个回答

6
您需要使用正则表达式,将分隔符作为一个组,并忽略空字符串,如下所示:

您需要使用正则表达式,将分隔符作为一个组,并忽略空字符串,如下所示

>>> [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:当您在字符串的开头或结尾分隔符处拆分字符串时,将得到一个空字符串。请查看此问题了解其原因。


filter(None, re.split('([*])', '*abc*bbc')) - hwnd
@hwnd 实际上,在Python中,列表推导式比filter更受青睐 :) - thefourtheye
是的,这是首选但也不错 =) - hwnd

3
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 进行匹配。

2

使用partition()函数;

a = "abc*bbc"
print (a.partition("*"))

>>> 
('abc', '*', 'bbc')
>>> 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接