【Python】re方法
之前工作在hive中會使用regxep代替re方法匹配字串,利用Python的re模組也可以實現很多功能,需要在需求中慢慢掌握。
今天需要記錄的是使用re模組從日誌資料中抽取出對應欄位的值,是資料清洗很常見的工具。
在之前的面試中有要求抽取資料,當時看到欄位是{}組成,一直往字典方向思考。其實用re就能很快處理好。
re的常見命令:
一、re萬用字元
'.*?"Date":"(.*?)","'
.* 與 .*?的區別
.* ——匹配最長的符合條件的字元
.*? ——匹配最短的符合條件的字元
示例:對於aabab
re.search('a.*b','aabab',flags=0).group(0)>>>返回 aabab
re.search('a.*?b','aabab',flags=0).group(0)>>>返回aab
基礎字元:
. 點號,匹配除了換行符以外的任意一個字元
*
星號,匹配任何字元,前一個字元匹配0次或者任意多次
?
問號,匹配任意一個字元
[]
中括號,匹配括號中的一個字元
^ 匹配行首,^helloworld會匹配以helloworld開頭的行
\ 轉義
\d 匹配一個數字字元。等價於[0-9]。
\D 匹配一個非數字字元。等價於[^0-9]。
二、re.search(查詢的內容, 對應欄位,[flags =0]) ## 在字串中查詢模式,flags實現精確匹配
>>>if 找到了,返回true
>>> re.search.group() ##拿到匹配成功的內容
group(0) ##返回整體
group(1) ##返回第一個匹配成功括號
group(2) ##返回第二個匹配到的括號內的值
groups() ##返回匹配到的所有內容
示例:
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