1. 程式人生 > >python-進階教程-使用正則表示式拆分多重分隔符字串

python-進階教程-使用正則表示式拆分多重分隔符字串

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)