【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

 

posted @ 2020-12-16 17:47  赶明儿见  阅读(463)  评论(0)    收藏  举报