1. 程式人生 > 實用技巧 >【Python】re方法

【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