Python中使用多个分隔符分隔字符串re.split
摘要
split多个分隔符 单一分隔符,使用str.split()即可 多个分隔符,复杂的分隔情况,使用re.split
单一分隔符,str.split()与 re.split()效果是一样的 多个单一 分隔符 时 ,”[]”与 “|”的 效果是一样的,但是 请注意 使用 “|”时某些字符 需要转义 多个 长短 不一 的的分隔符的分隔符时, 就应该使用 “|” 适用 “()”则是 将分隔后的结果保留分隔符(在split中,分隔符理应是被刨除的,所以这里有点难理解) 详见基础篇
一些 更 复杂 的 就 需要 加深对正则表达式的了解了 ,比如(非)贪婪模式,前/后向匹配 详见进阶篇
基础篇
import re line = "word;Word;temp" """ 单一分隔符,str.split()与 re.split()zuoy作用一致 """ print line.split("; ") # [word, Word, temp] print re.split(r"; ", line) # [word, Word, temp] """ 多个单一 分隔符 时 ,"[]"与 "|"的 效果是一样的,但是 请注意 使用 “|”时 mouxie某些字符 需要转义 """ line1 = "word;Word,emp?hahaha" print re.split(r";|,|?", line1) #别忘了转义"?" # [word, Word, emp, hahaha] print re.split(r"[;,?]", line1) # [word, Word, emp, hahaha] ## 当 空格 出现 时 ,就 十分讨厌了(ノω<。)ノ))☆.。 """ 多个 长短 不一 的的分隔符的分隔符时, 就应该使用 "|" """ line2 = "word;Word,emp? hahaha; whole, cai" print re.split(r";|,|?s|;s|,s", line2) # [word, Word, emp, hahaha, whole, cai] ## 以上 只是 为了 说明这些的吗的适用情况 ,还有 更加渐变简便 的 用法 是 print re.split(r"W+", line) print re.split(r"W+", line1) print re.split(r"W+", line2) """ 适用 “()”则是 将 分隔 后的 结果 连同分隔符均 有所 保留 """ print re.split(r"(W+)", line2) # [word, ;, Word, ,, emp, ? , hahaha, ; , whole, , , cai] # 注意: 连 空格 都 保留了
进阶篇
""" 在 正则中 具有 含义 的 符号 也将 作为 分隔符 的 通用 解决 办法 ,请不要 在 尝试 要有 多少个 ‘’ """ delimiters = "a", "...", "(C)" regexPattern = |.join(map(re.escape, delimiters)) # a|\.\.\.|\(C\) line = "stackoverflow (C) is awesome... isnt it?" print re.split(regexPattern,line) # [st, ckoverflow , is , wesome, " isnt it?"] """ 一些 更 复杂 的 就 需要 你对 正则 表达式 的更 深入 的 了解了 以下是 stackoverflow的 关于 re.split的 问题 """ ##split a string like "HELLO there HOW are YOU" by uppercase, thus the result is [HELLO there, HOW are, YOU] line1 = "HELLO there HOW are YOU" re.split(r"s+(?=[A-Z]+)", line1) # 后向匹配 # i want to split “400-IF(3>5,5,5)+34+IF(4>5,5,6)” by string IF(3>5,5,5), so re.split() should give list with length: 2 [400-, +34+] line2 = “400-IF(3>5,5,5)+34+IF(4>5,5,6)” .join(re.split(rIF(.*?),z)).split() # 贪婪模式