- Python進(jìn)階編程:編寫更高效、優(yōu)雅的Python代碼
- 劉宇宙 謝東 劉艷
- 627字
- 2021-04-30 12:39:37
2.2.1 字符串分割
我們在工作中經(jīng)常會遇到這樣的問題:將一個分割符不固定的字符串分割為多個字段。
String對象中有一個split()方法,該方法只適用于非常簡單的字符串分割情形,不允許有多個分隔符或者是分隔符周圍有不確定的空格。當(dāng)需要更加靈活地切割字符串時,最好使用re.split()函數(shù),示例如下:
import re line = 'hello world; life is short,use, python, best' # 使用正則表達(dá)式做分割 print(re.split(r'[;,\s]\s*', line))
re.split()函數(shù)是非常實(shí)用的,它允許為分隔符指定多個正則模式。如在上述例子中,分隔符可以是逗號、分號或者是空格,并且后面緊跟著任意個空格。只要這個模式被找到,匹配的分隔符兩邊的實(shí)體都會被當(dāng)成是結(jié)果中的元素返回。返回結(jié)果為一個字段列表,這與str.split()函數(shù)返回值類型是一樣的。
當(dāng)使用re.split()函數(shù)時,需要特別注意正則表達(dá)式中是否包含捕獲型括號進(jìn)行捕獲分組。如果使用了捕獲分組,那么被匹配的文本將出現(xiàn)在結(jié)果列表中。代碼示例如下:
sub_line_list = re.split(r'(;|,|\s)\s*', line) print(sub_line_list)
獲取分割字符在某些情況下也是有用的。如果想保留分割字符串用于重新構(gòu)造新的輸出字符串,代碼示例如下:
val_list = sub_line_list[::2] print(val_list) delimiters = sub_line_list[1::2] + [''] print(delimiters) print(' '.join(v+d for v,d in zip(val_list, delimiters)))
如果不想保留分割字符串到結(jié)果列表中,但仍然需要使用括號來分組正則表達(dá)式,以確保分組是非捕獲分組,形如(?...),代碼示例如下:
print(re.split(r'(?:,|;|\s)\s*', line))
擴(kuò)展:正確判斷空對象
字符串處理中,系統(tǒng)經(jīng)常需要做空字符串的判斷。在Python中,除了空字符串,還有如下數(shù)據(jù)會當(dāng)作空來處理:
·常量None。
·常量False。
·任何形式的數(shù)值類型零,如0、0.0、0j。
·空的序列,如''、()、[]。
·空的字典,如{}。
我們遇到上述這些類型的對象時,需要注意空的處理,否則會出現(xiàn)意想不到的結(jié)果。
- R語言數(shù)據(jù)分析從入門到精通
- Spring Cloud Alibaba微服務(wù)架構(gòu)設(shè)計與開發(fā)實(shí)戰(zhàn)
- 算法零基礎(chǔ)一本通(Python版)
- 單片機(jī)C語言程序設(shè)計實(shí)訓(xùn)100例:基于STC8051+Proteus仿真與實(shí)戰(zhàn)
- Dependency Injection in .NET Core 2.0
- JavaScript+jQuery開發(fā)實(shí)戰(zhàn)
- Java 9 Programming Blueprints
- Mastering AndEngine Game Development
- PLC應(yīng)用技術(shù)(三菱FX2N系列)
- Getting Started with React Native
- Python+Tableau數(shù)據(jù)可視化之美
- Android嵌入式系統(tǒng)程序開發(fā):基于Cortex-A8(第2版)
- C語言程序設(shè)計
- SignalR:Real-time Application Development(Second Edition)
- Hacking Android