文本处理常用方法
匹配模式字符串不要有任何空格和變量,重要!重要!重要!
re
準備正則表達式
- 在正則表達式中,如果直接給出字符,就是精確匹配。
\d 可以匹配一個數字
\W 匹配非字母數字及下劃線
\w 可以匹配一個字母或數字
\s 空格 - 要匹配變長的字符,在正則表達式中,用*表示任意個字符(包括0個),用+表示至少一個字符,用?表示0個或1個字符,用{n}表示n個字符,用{n,m}表示n-m個字符:
例:\d{3}\s+\d{3,8}
表示的意思:\d{3}表示匹配3個數字,例如’010’;\s可以匹配一個空格(也包括Tab等空白符),所以\s+表示至少有一個空格,例如匹配’ ‘,’ ‘等;\d{3,8}表示3-8個數字,例如’1234567’
- 要做更精確地匹配,可以用[]表示范圍
例如:
search
re.search 掃描整個字符串并返回第一個成功的匹配
""" 語法 re.search(pattern, string, flags=0) pattern 匹配的正則表達式 string 要匹配的字符串。 flags 標志位,用于控制正則表達式的匹配方式,如:是否區分大小寫,多行匹配等等。 匹配成功re.search方法返回一個匹配的對象,否則返回None。我們可以使用group(num) 或 groups() 匹配對象函數來獲取匹配表達式。 """ #!/usr/bin/python import reline = "Cats are smarter than dogs";searchObj = re.search( r'(.*) are (.*?) .*', line, re.M|re.I)if searchObj:print "searchObj.group() : ", searchObj.group()print "searchObj.group(1) : ", searchObj.group(1)print "searchObj.group(2) : ", searchObj.group(2) else:print "Nothing found!!"match
re.match只匹配字符串的開始,如果字符串開始不符合正則表達式,則匹配失敗,函數返回None;而re.search匹配整個字符串,直到找到一個匹配。
#!/usr/bin/python import reline = "Cats are smarter than dogs";matchObj = re.match( r'dogs', line, re.M|re.I) if matchObj:print "match --> matchObj.group() : ", matchObj.group() else:print "No match!!"matchObj = re.search( r'dogs', line, re.M|re.I) if matchObj:print "search --> searchObj.group() : ", matchObj.group() else:print "No match!!"sub
Python 的 re 模塊提供了re.sub用于替換字符串中的匹配項。
""" 語法:re.sub(pattern, repl, string, count=0, flags=0) 參數:pattern : 正則中的模式字符串。 repl : 替換的字符串,也可為一個函數。 string : 要被查找替換的原始字符串。 count : 模式匹配后替換的最大次數,默認 0 表示替換所有的匹配。 """ #!/usr/bin/python # -*- coding: UTF-8 -*-import rephone = "2004-959-559 # 這是一個國外電話號碼"# 刪除字符串中的 Python注釋 num = re.sub(r'#.*$', "", phone) print "電話號碼是: ", num# 刪除非數字(-)的字符串 num = re.sub(r'\D', "", phone) print "電話號碼是 : ", num 以上實例執行結果如下: 電話號碼是: 2004-959-559 電話號碼是 : 2004959559 re.sub(r'^[0]{1,100}', '', test) #去掉開頭的0split
re.split
split 方法按照能夠匹配的子串將字符串分割后返回列表,它的使用形式如下:
string
split
不支持正則及多個切割符號,不感知空格的數量,比如用空格切割,會出現下面情況。
>>> s1="aa bb cc" >>> s1.split(' ') ['aa', 'bb', '', 'cc']spritlines
Python splitlines() 按照行(’\r’, ‘\r\n’, \n’)分隔,返回一個包含各行作為元素的列表,如果參數 keepends 為 False,不包含換行符,如果為 True,則保留換行符。
str1 = 'ab c\n\nde fg\rkl\r\n' print str1.splitlines();str2 = 'ab c\n\nde fg\rkl\r\n' print str2.splitlines(True)['ab c', '', 'de fg', 'kl'] ['ab c\n', '\n', 'de fg\r', 'kl\r\n']strip
Python strip() 方法用于移除字符串頭尾指定的字符(默認為空格或換行符)或字符序列。
注意:該方法只能刪除開頭或是結尾的字符,不能刪除中間部分的字符。
# re.match(pattern, string, flags=0) #!/usr/bin/python # -*- coding: UTF-8 -*-str = "00000003210Runoob01230000000"; print str.strip( '0' ); # 去除首尾字符 0str2 = " Runoob "; # 去除首尾空格 print str2.strip(); result: 3210Runoob0123 Runoob# 只要頭尾包含有指定字符序列中的字符就刪除: #!/usr/bin/python # -*- coding: UTF-8 -*-str = "123abcrunoob321" print (str.strip( '12' )) # 字符序列為 12 3abcrunoob3re.search().group()
import re a = "123abc456" print re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(0) #123abc456,返回整體 print re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(1) #123 print re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(2) #abc print re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(3) #456# 原文鏈接:https://blog.csdn.net/sinat_20174131/article/details/77769309正則表達式中的三組括號把匹配結果分成三組
group() 同group(0)就是匹配正則表達式整體結果 group(1) 列出第一個括號匹配部分,group(2) 列出第二個括號匹配部分,group(3) 列出第三個括號匹配部分。沒有匹配成功的,re.search()返回None
總結
- 上一篇: chromedriver与chrome各
- 下一篇: 自定义泛型集合,接口