官术网_书友最值得收藏!

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é)果。

主站蜘蛛池模板: 吴江市| 开鲁县| 巴马| 微博| 蕲春县| 伽师县| 临洮县| 武川县| 大洼县| 江都市| 永和县| 昆山市| 繁峙县| 阿拉善左旗| 金堂县| 那坡县| 东明县| 公主岭市| 佳木斯市| 遵化市| 饶平县| 龙井市| 和田市| 株洲县| 冀州市| 新巴尔虎右旗| 怀来县| 余庆县| 铁力市| 安仁县| 苏尼特右旗| 青海省| 雅江县| 新河县| 连平县| 枣强县| 东阳市| 通城县| 乳源| 灵璧县| 稷山县|