上一篇文章: Python實用技法第19篇:將多個映射合併爲單個映射
下一篇文章: Python實用技法第21篇:在字符串的開頭和結尾處作文本匹配
咱們須要將字符串拆分爲不一樣的字段,可是分隔符(以及分隔符之間的空格)在整個字符串中並不一致。
字符串對象的split()方法只能處理很是簡單的狀況,並且不支持多個分隔符,對分隔符周圍存在的多種空格狀況也無能爲力。當須要一些更爲靈活地功能時,應該使用re.split()方法:正則表達式
import re line='abc def ; ghi, jkl,mno, pkr' #分隔符:分號,都逗號,空格符,先後能夠跟着任意數量的額外空格 result=re.split(r'\s*[;,\s]\s*',line) print(result)
結果:segmentfault
['abc', 'def', 'ghi', 'jkl', 'mno', 'pkr']
re.split()是頗有用的,由於能夠爲分隔符指定多個模式。例如,在上面的解決方案中,分隔符:分號,都逗號,空格符,先後能夠跟着任意數量的額外空格。同str.split()獲得的結果同樣,最終獲得的結果是字段列表。code
當使用re.split()時,須要當心正則表達式模式中的捕獲組是否包含在了括號裏。對象
若是用到了捕獲組,那麼匹配的文本也會包含在最終結果中。好比,看看下面的案例:ip
import re line='abc def ; ghi, jkl,mno, pkr' result=re.split(r'\s*(;|,|\s)\s*',line) print(result)
結果:字符串
['abc', ' ', 'def', ';', 'ghi', ',', 'jkl', ',', 'mno', ',', 'pkr']
在特定的上下文中獲取到分隔符也多是有用的。例如,用分隔字符來改進字符串的輸出:get
import re line='abc def ; ghi, jkl,mno, pkr' result=re.split(r'\s*(;|,|\s)\s*',line) values=result[::2] delimiters=result[1::2]+[''] print(values) print(delimiters) last=''.join(v+d for v,d in zip(values,delimiters)) print(last)
結果:it
['abc', 'def', 'ghi', 'jkl', 'mno', 'pkr'] [' ', ';', ',', ',', ',', ''] abc def;ghi,jkl,mno,pkr
若是不想在結果中看到分隔字符,但仍然想用符號來對正則表達式模式進行分組,請確保用的是非捕獲組,以(?:...)的形式指定。示例以下:ast
import re line='abc def ; ghi, jkl,mno, pkr' result=re.split(r'\s*(?:;|,|\s)\s*',line) print(result)
結果:import
['abc', 'def', 'ghi', 'jkl', 'mno', 'pkr']
上一篇文章: Python實用技法第19篇:將多個映射合併爲單個映射
下一篇文章: Python實用技法第21篇:在字符串的開頭和結尾處作文本匹配