1. 程式人生 > >Python中使用多個分隔符分隔字串re.split

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... isn't it?"
print re.split(regexPattern,line) # ['st', 'ckoverflow ', ' is ', 'wesome', " isn't 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(r'IF\(.*?\)',z)).split()  # 貪婪模式