python字符串分割
内置split()函数 str.split(sep=None, maxsplit=-1)
sep为自定义分割符,maxsplit为最大分割次数,默认值-1进行全部分割
注意以下区别:
-
str.split()
以空格分割,包括连续空格 -
str.split(' ')
同样以空格分割,但是不能识别连续空格,会返回两空格之间的空字符串
python3 doc
re模块的split()函数 re.split(pattern, string, maxsplit=0, flags=0)
使用正则表达式更加灵活地进行分割👉python3 re.split()
pattern分割模式
正则表达式描述pattern
官方文档中举例以下几种:
-
r'\W+'
非单词字符的字符作为分割符 -
r'(\W+)'
以括号包裹正则表达式则会在结果中保留用来分割的字符 -
'[a-f]+'
a-f组成的字符串作为分割符
输入
print(re.split(r'\W+','Words, words, word.'))
print(re.split(r'\W+','Words,,words,word.'))
print(re.split(r'[a-f]+','a3b4gf',flags = re.IGNORECASE))
输出
['Words', 'words', 'word', '']
['Words', ',,', 'words', ',', 'word', '.', '']
['', '3', '4g', '']
正则表达式说明指路👉python3中正则表达式说明文档
其他参数
maxsplit和内置的split函数一样,只不过以0作为缺省值
flags:用来修改pattern表达式的功能re.IGNORECASE
忽略大小写 其他的可用值👉更多
记录一个奇怪的现象:
print(re.split(r'[a-f]+','a3b4gf',flags = re.IGNORECASE))
print(re.split(r'[a-f]+','a3b4gf',re.IGNORECASE))
输出
['', '3', '4g', '']
['', '3', '4gf']
传入参数包括"flags = "和不包括时,结果不同,原因不太清楚。此外这个测试用例表明分割符前后的内容都会包含在结果中,所以输出开头就有一个空字符串,这一点很古怪。
去除连续分割符之间的空字符串
以上两个函数的简单实用经常在结果中产生空字符串,解决办法解决如下,使用re.split()。
- 使用列表推导式
[x for x in re.split(r'[,\s]',str) if x]
逗号、空格分割字符串并且去除连续的分割符 - 使用正则表达式
sList = re.split(r"[,\s]+",s.strip())
使用多字符字符分割时,用'+'修饰就能过滤重复分割符了。
输入1:3 4, 7 3
输出:['3', '4', '7', '3']
输入2:4,, 5
输出:['4', '5']