对字符串进⾏切分的技巧
对字符串进⾏切分有两种⽅法:str.split() 和 re.split()
Python中字符串分割的常⽤⽅法是直接调⽤字符串的str.split⽅法,但是其只能指定⼀种分隔符,如果想指定多个分隔符拆分字符串需要⽤到re.split⽅法(正则表达式的split⽅法)。
str.split
字符串的split⽅法函数原型如下,其中sep为指定的分隔符,maxsplit为最⼤分割次数:
1str.split(sep=None, maxsplit=-1)
默认情况下,不指定分隔符时则以空⽩字符(空格,回车,制表符等)作为分隔符拆分字符串:
1 2 3 4>>> s = 'A B\tC\nD' >>> s.split()
['A', 'B', 'C', 'D'] >>>
在结果列表中,不会包含空字符串:
1 2 3 4>>> s = ' A B\tC\nD\n\n' >>> s.split()
['A', 'B', 'C', 'D'] >>>
指定分隔符:
1 2 3 4 5 6 7>>> s = 'le' >>> s.split('.')
['www', 'google', 'com'] >>> s = 'AA||BB||CC||DD' >>> s.split('||')
['AA', 'BB', 'CC', 'DD'] >>>
指定最⼤分割次数:
1 2 3 4 5 6 7>>> s = 'le' >>> s.split('.', 1)
['www', 'google'] >>> s = 'AA||BB||CC||DD' >>> s.split('||', 2)
['AA', 'BB', 'CC||DD'] >>>
由此可见,当指定最⼤分割次数maxsplit时,结果列表长度为maxsplit+1。
但是,字符串的split⽅法只能指定⼀个分隔符,如下:
1s = 'AAAA,BBBB:CCCC;DDDD'
如果想指定逗号、冒号、分号都做为分隔符,字符串的split⽅法是做不到的,此时要⽤正则表达式中的split⽅法。
re.split
正则表达式的split⽅法原型如下,其中pattern为指定的分隔正则表达式,string为要分割的字符串,maxsplit为最⼤分割次数,flags为正则表
达式⽤到的通⽤标志:
1re.split(pattern, string, maxsplit=0, flags=0)参考⽰例:
1 2 3 4 5>>> import re
>>> s = 'AAAA,BBBB:CCCC;DDDD' >>> re.split(r'[,:;]', s)
['AAAA', 'BBBB', 'CCCC', 'DDDD'] >>>
如果在正则表达式⾥使⽤了捕获组也就是括号,则结果列表中也会包含捕获的内容:
1 2 3 4 5>>> import re
>>> s = 'AAAA,BBBB:CCCC;DDDD' >>> re.split(r'([,:;])', s)
['AAAA', ',', 'BBBB', ':', 'CCCC', ';', 'DDDD'] >>>
如果不想在结果中看到分隔符,但仍然想⽤括号对正则表达式模式进⾏分组,可以使⽤⾮捕获组,以(?:...)的形式指定,⽰例如下:
1 2 3 4 5>>> import re
>>> s = 'AAAA,BBBB:CCCC;DDDD' >>> re.split(r'(?:[,:;])', s)
['AAAA', 'BBBB', 'CCCC', 'DDDD'] >>>
指定最⼤分割次数:
1 2 3 4 5 6 7>>> import re
>>> s = 'AAAA,BBBB:CCCC;DDDD' >>> re.split(r'[,:;]', s, 1)
字符串长度不同怎样取['AAAA', 'BBBB:CCCC;DDDD'] >>> re.split(r'[,:;]', s, 2)
['AAAA', 'BBBB', 'CCCC;DDDD'] >>>
由此可见,当指定最⼤分割次数maxsplit时,结果列表长度为maxsplit+1。指定正则表达式中的通⽤标志flags:
1 2 3 4>>> import re
>>> re.split('[a-f]+', '0a3B9', flags=re.IGNORECASE) ['0', '3', '9']
>>>

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。