【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
浙公网安备 33010602011771号