re-正则表达式模块
import re 预定义字符集: d:数字[0-9] D:非数字[^d] s:空白字符[<空格>trnfv] S:非空白字符[^s] w:单词字符[A-Za-z0-9_] W:非单词字符[^w] 匹配数量: .:匹配除换行符以外的任何单个字符 *:匹配前一个字符0或无限次(尽可能多的匹配) *?:尽可能少的进行匹配前边的正则表达式 +:匹配前一个字符1次或无限次(尽可能多的匹配) +?:尽可能少的进行匹配前边的正则表达式 ?:匹配前一个字符0次或1次(尽可能多的匹配) ??:尽可能少的进行匹配前边的正则表达式 {m}:匹配前一个字符m次 {m,n}:匹配前一个字符m至n次(尽可能多的匹配) {m,n}?:尽可能少的进行匹配前边的正则表达式 :转义字符 ?P<name>R:R表示为正则表达式,对正则表达式匹配到的内容进行命名 函数: match():从字符串第一个字符开始匹配,直到不能匹配到为止,并返回匹配到的字符串;如果开头不能匹配则返回NoneType报错信息 例: a = 'kjksajt3w9#53~59/35(*_dvds~r)3' m = re.match("w+",a) m.group() search():在所有的字符串中开始进行匹配,返回匹配到的第一个结果 例: a = 'kjksajt3w9#53~59/35(*_dvds~r)3' m = re.search("dvd",a) m.group() findall():返回所有匹配到的结果;返回一个列表 例: a = 'kjksajt3w9#53~59/35(*_dvds~r)3' re.findall("[a-zA-Z]+",a) split():用匹配到的字符对字符串进行切割;返回一个列表 例: a = 'kjksajt3w9#53~59/35(*_dvds~r)3' re.split("d+",a) sub():把匹配到的内容进行替换,可以设定替换次数;返回替换后的结果 例: a = 'kjksajt3w9#53~59/35(*_dvds~r)3' re.sub('d+',"|",a,count=3) group():返回匹配到的结果,常跟在match和search之后 例: a = 'kjksajt3w9#53~59/35(*_dvds~r)3' re.match("w+",a).group() re.search("dvd",a).group() compile():把正则表达式进行编译 例: com = re.compile(r'd+') #r表示自然字符串,里边的字符不会被转义 e = com.findall('ksdhfkjshdfjkwiu237yyy8w7ye782skdhfkj374ljhfk2') print(e) 注:可以看到compile编译后返回一个对象,在进行大量匹配的时候,compile效率会更高 groups():分组,即只获取括号内的匹配到的数据;以元组的形式返回 例: f = re.search('(d+)hfkjshdfjkwiu(d+)','ksd234234hfkjshdfjkwiu237yyy8w7ye782') print(f.groups()) groupdict():以命名方式匹配成功后,同时返回名字和匹配到的内容 例: o = re.compile(r'(?P<name>d+)') m = o.search('127.0.0.1') m.groupdict() 用正则匹配一条nginx日志: 日志: 66.249.69.131 - - [10/Aug/2016:03:20:09 +0800] "GET /robots.txt HTTP/1.1" 404 162 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" 匹配规则: p = r'(?P<ip>d{1,3}.d{1,3}) .* .* [(?P<time>.*)] "(?P<method>w+) (?P<url>[^s]*) (?P<version>[w|/.d]*)" (?P<status>d{3}) (?P<length>d+) "(?P<refer>[^s]*)" "(?P<userAgent>.*)"' 匹配结果: {'ip': '66.249.69.131', 'length': '162', 'method': 'GET', 'refer': '-', 'status': '404', 'time': '10/Aug/2016:03:20:09 +0800', 'url': '/robots.txt', 'userAgent': 'Mozilla/5.0 (compatible; Googlebot/2.1; ' '+http://www.google.com/bot.html)', 'version': 'HTTP/1.1'} (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- ruby-on-rails – Rails ActiveRecord – update_all:如何
- vb.net 灵活注册事件,达到可以有条件调用事件的目的
- sqlite 时间字段 自动时间值
- c# – 如何确保只有一个线程会做某事?
- Cocos2d-x笔记记忆整理Day3
- [Oracle] dbms_metadata.get_ddl 的使用方法总结
- ruby-on-rails – 如何在Ruby on Rails中添加自定义路由,控
- ruby-on-rails – 使用accepts_nested_attributes_for,has_
- ruby-on-rails – 带nginx的乘客:无法加载此类文件 – bun
- CoreData实例分析学习(1)