re.split()总结

单一分隔符,str.split()与 re.split()作用一致

import re
a = 'a,b,c'
print(a.split(','))    # ['a', 'b', 'c']
print(re.split(',',a)) # ['a', 'b', 'c']

多个单一 分隔符 时 ,"[]"与 "|"的 效果是一样的,但是 请注意 使用 “|”时 某些字符 需要转义 。如:下例中的 ‘?’

a = 'a,b;c?da'
print(re.split('[,;?]',a))     # ['a', 'b', 'c', 'da']
print(re.split(',|;|\?',a))    # ['a', 'b', 'c', 'da']

多个 长短 不一 的分隔符时, 就应该使用 “|”

a = 'a ,b;c?da'
print(re.split('\s,|;|\?',a))  # ['a', 'b', 'c', 'da']

当某个分隔符A可以由其它分隔符组成时,A无效

a = 'a,b;c?,;da;,cccc'
print(re.split(',|;|\?,;|;,',a)) # ['a', 'b', 'c', 'da', '', 'cccc']
print(re.split(',|;|\?,;',a))    # ['a', 'b', 'c', 'da', '', 'cccc']

';,'可以由';'和','组成,所以结构出现了';'和','之间两个符号间的空格

简便方法

a = 'a,b;c?,;da;,cccc'
print(re.split(r"\W+", a))  # ['a', 'b', 'c', 'da', 'cccc']

高级

import re
line = 'abcd efg; hhh , ;jjk,lmn, love ,hello, ,python'
print(re.split(r'[\s|,|;]+',line))
print(re.split(r'([\s|,|;]+)',line))
print(re.split(r'(\s|,|;)+',line))
print(re.split(r'(\s|,|;)\s*',line))
# 结果
['abcd', 'efg', 'hhh', 'jjk', 'lmn', 'love', 'hello', 'python']
['abcd', ' ', 'efg', '; ', 'hhh', ' , ;', 'jjk', ',', 'lmn', ', ', 'love', ' ,', 'hello', ', ,', 'python']
['abcd', ' ', 'efg', ' ', 'hhh', ';', 'jjk', ',', 'lmn', ' ', 'love', ',', 'hello', ',', 'python']
['abcd', ' ', 'efg', ';', 'hhh', ' ', '', ',', '', ';', 'jjk', ',', 'lmn', ',', 'love', ' ', '', ',', 'hello', ',', '', ',', 'python']
  1. 加了括号的,括号内容也会保留下来,即分隔符也会输出。所以第一个没有分隔符输出
  2. 匹配一次或多次的分隔符也作为结果输出
  3. 多个分隔符连着的,只会输出最后一个分隔符,如 ‘hhh’后面输出’;’(此例仅为了加深语法理解)
  4. 括号内的连着0个或多个空格符,输出括号内的(此例仅为了加深语法理解)

非捕获分组

形如 (?: )

import re
line = 'abcd efg; hhh , ; love ,hello, ,python'
print(re.split(r'(\s|,|;)\s*',line))
print(re.split(r'(?:\s|,|;)\s*',line))
输出
['abcd', ' ', 'efg', ';', 'hhh', ' ', '', ',', '', ';', 'love', ' ', '', ',', 'hello', ',', '', ',', 'python']
['abcd', 'efg', 'hhh', '', '', 'love', '', 'hello', '', 'python']

注意:
*匹配0或多个正好在它之前的那个字符。*意味着能够匹配任意数量的任何字符。(具有贪婪性质)
?表示非贪婪模式

你可能感兴趣的:(python,正则表达式,字符串)