python中的各种字符串分割方法汇总
今天来给大家介绍一下python当中能用到的各种字符串的分割方法。他们分别是:
- slpit
- rsplit
- splitlines
- partition
- rpartition
- re.split
下面各部分是各方法的详细介绍
split(sep=None, maxsplit=-1)
最常见的方法,该方法使用sep设置的符号将一个字符串分割并返回分割后的对象,结果为list列表。同时可以通过设置maxsplit参数指定最大分割成的结果列表的长度,该参数默认为1,下面举几个例子
默认情况下第一个参数为分割符sep参数,第二个参数为最大个数maxsplit,如果两个参数都有,可以不用指定参数名,如果在第一个参数sep保持默认情况下,如果需要第二个参数不保持默认,则需要指定参数名。
split 例子1
不指定分割符的情况下,python默认使用空格和换行符(不同系统下的换行符都可以)进行分割
## 平常的空格分割
normal = "this is a string"
normal.split()
#Out[1]: ['windows', 'string']
## 多个空格,自动合并处理
twospace = "string two space one"
twospace.split()
#Out[2]: ['string', 'two', 'space', 'one']
## 换行符分割
line = "aother\nstring"
line.split()
#Out[5]: ['aother', 'string']
## widnwos下的换行符
wline = "windows\r\nstring"
wline.split()
#Out[7]: ['windows', 'string']
split 例子2
自定义用于分割的字符串
## 用一般逗号句号等
normal = "this,is,a,string"
normal.split(",")
# Out[1]: ['this', 'is', 'a', 'string']
##也可以使用单词等字符串
words = u"我是春江暮客博客博主"
words.split(u"博客")
#Out[1]: ['我是春江暮客', '博主']
split 例子3
指定将字符串分割成多少份,参数为maxsplit
## 只需要分成三部分,注意此处份数从0开始计算
spe_len = "this,is,a,string"
spe_len.split(",",2)
#['this', 'is', 'a,string']
##第一个参数默认,第二个参数自定则需要指定参数名,此处为maxsplit
spe_len = "this is a string"
spe_len.split(maxsplit=2)
#['this', 'is', 'a string']
rsplit(sep=None, maxsplit=-1)
该函数与split基本一样,不一样的地方就是这个r代表right,右边。也就是在计算分割成的数组长度不为默认时,从右边开始分割,下面以具体例子说明。
## 平常的空格分割,与split一模一样
normal = "this is a string"
normal.rsplit()
#Out[1]: ['windows', 'string']
## 指定分割符,与split一模一样
normal = "this,is,a,string"
normal.rsplit(",")
#Out[2]: ['this', 'is', 'a', 'string']
## 指定分割长度,与split不一样
### split
spe_len = "this is a string"
spe_len.split(maxsplit=2)
#['this', 'is', 'a string']
### rsplit
spe_len = "this is a string"
spe_len.rsplit(maxsplit=2)
Out[2]: ['this is', 'a', 'string']
可以看到在rsplit当中,分割后的字符串多余的字符串全部在第一个位置’this is’,而split分割后多余的字符串在最后一个位置’a string'
splitlines(keepends=False)
行分割,该函数使用各种不同的行分割符对字符串进行分割,但是与split分割行不同之处在于该分割方法不会对多个行分割符进行合并,该函数唯一可指定参数为keepends,布尔值,表明是否保留用于分割的字符串的分割符,默认为False。 该参数可分割的行分割符有这些
["\n","\r","\r\n","\v","\x0b","\f","\x0c","\x1c","\x1d","\x1e","\x85","\u2028","\u2029"]
下面举几个例子
# 行分割
s = "我是\n春江暮客\r博客\r\n博主"
s.splitlines()
#Out[1]: ['我是', '春江暮客', '博客', '博主']
#指定保留分割符号,此时分割符号会紧跟前面的字符串
s = "我是\n春江暮客\r博客\r\n博主"
s.splitlines(True)
#Out[2]: ['我是\n', '春江暮客\r', '博客\r\n', '博主']
partition(sep)
在分割符第一次出现时,将字符串分割,返回一个3个元素的元组,分别是分割符前的字符串,分割符,分割后的字符串 由于分割符sep没有默认值,如果不指定,将会报错, 如果分割符在字符串没有出现,会出现第一个元素就是字符串本身
例子:
# 空格分割
s = "我是 春江暮客 博客博主"
s.partition(" ")
# Out[3]: ('我是', ' ', '春江暮客 博客博主')
# 回车分割
s2 = "我是\n春江暮客\r博客\r\n博主"
s2.partition("\r")
# Out[2]: ('我是\n春江暮客', '\r', '博客\r\n博主')
# 不指定分割报错
s3 = "我是\n春江暮客\r博客\r\n博主"
s3.partition()
#TypeError: partition() takes exactly one argument (0 given)
# 没有出现的分割符
s4 = "我是\n春江暮客\r博客\r\n博主"
s4.partition(",")
#Out[2]: ('我是\n春江暮客\r博客\r\n博主', '', '')
rpartition(sep)
与partition类似,不同的是从右边开始寻找第一个分割符。与前面介绍的split和rsplit一样,直接看例子
## 这是partition
s3 = "我是\n春江暮客\r博客\r\n博主"
s3.partition("\r")
#Out[2]: ('我是\n春江暮客', '\r', '博客\r\n博主')
## 这是rpartition
s3 = "我是\n春江暮客\r博客\r\n博主"
s3.rpartition("\r")
#Out[3]: ('我是\n春江暮客\r博客', '\r', '\n博主')
re.split(pattern, string, maxsplit=0, flags=0)
还一个就是使用re模块提供的split方法,正则匹配的好处就在于它不需要匹配多种字符或数字等,不像其他方法需要指定分割符,当然开销也就更大。 pattern参数为正则匹配表达式,string为需要拆分的字符串,maxsplit为最大分割,默认不指定,从0开始计算。 flags设置为re.IGNORECASE后可以忽略大小写.
例子:
#导入re模块
import re
#直接使用空格分割
s = "我是 春江暮客 博客 博主"
re.split(' ',s)
#Out[1]: ['我是', '春江暮客', '博客', '博主']
# 使用正则表达式的\s,代表任意的空白字符
s = "我是 春江暮客 博客 博主"
re.split('\s',s)
#Out[2]: ['我是', '春江暮客', '博客', '博主']
s = "我是 春江暮客\n 博客 博主"
re.split('\s',s)
#Out[3]: ['我是', '春江暮客', '', '博客', '博主']
#指定分割数
s = "我是 春江暮客 博客 博主"
re.split('\s',s,2)
#Out[2]: ['我是', '春江暮客', '博客 博主']
# 忽略大小写
## 一般小写匹配
s = "hello World pythOn"
re.split('o',s,2)
#Out[6]: ['hell', ' W', 'rld pythOn']
## 忽略大小写匹配
s = "hello World pythOn"
re.split('o',s,2,re.IGNORECASE)
#Out[7]: ['hell', ' W', 'rld pythOn']
总结
本文介绍了python当中可以用于字符串分割的6中方法,各种方法之间的差异及使用注意事项,在了解不同方法的特点后更有效率的进行字符串的分割。
参考
- 原文作者:春江暮客
- 原文链接:https://www.bobobk.com/852.html
- 版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可,非商业转载请注明出处(作者,原文链接),商业转载请联系作者获得授权。