今天来给大家介绍一下python当中能用到的各种字符串的分割方法。他们分别是:

  1. slpit
  2. rsplit
  3. splitlines
  4. partition
  5. rpartition
  6. 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中方法,各种方法之间的差异及使用注意事项,在了解不同方法的特点后更有效率的进行字符串的分割。

参考