python-進階教程-使用正則表示式拆分多重分隔符字串
阿新 • • 發佈:2019-01-11
0.摘要
字串自帶的.split()方法只能應對單一分隔符的情況,本文介紹正則表示式的方法可以滿足對多重分隔符分離要求,並且能夠處理更為複雜的字串。
1.re.split()
split(pattern, string, maxsplit=0, flags=0):該函式會按照pattern的形式對string進行分割,pattern通常以正則表示式編寫,用於說明分隔符的匹配樣式。
import re line = 'asdf fjdk; afed, fjek,asdf, foo' # (a) Splitting on space, comma, and semicolon parts = re.split(r'[;,\s]\s*', line) print(parts) #result:['asdf', 'fjdk', 'afed', 'fjek', 'asdf', 'foo']
本例子的string包含了空格、製表符、逗號、分號等多種分隔符。
正則表示式中:
[]:表示字元集合,匹配所包含的任意一個字元。
\s:表示匹配任何空白字元,包括空格、製表符、換頁符等等。等價於 [ \f\n\r\t\v]。
*:表示匹配前面的子表示式零次或多次。
r'[;,\s]\s*':表示分隔符為:分號、逗號和空白字元三者之一+[0,+∞)個空白字元。
需要注意的是:
如果pattern的正則表示式中有包含在括號中的捕獲組,那麼匹配的文字也會出現在最終的返回值中:
# (b) Splitting with a capture group fields = re.split(r'(;|,|\s)\s*', line) print(fields) #result:['asdf', ' ', 'fjdk', ';', 'afed', ',', 'fjek', ',', 'asdf', ',', 'foo']
從上例中可以看出,空格、逗號等字元也出現在了返回值中。
如果想要避免分割字元出現在返回列表中,可以使用(?……)形式,破壞捕獲組結構即可。
parts = re.split(r'(?:,|;|\s)\s*', line)
print(parts)