时间:2021-05-22
re 模块使 Python 语言拥有全部的正则表达式功能。
会用到的语法
正则字符 释义 举例 + 前面元素至少出现一次 ab+:ab、abbbb 等 * 前面元素出现0次或多次 ab*:a、ab、abb 等 ? 匹配前面的一次或0次 Ab?: A、Ab 等 ^ 作为开始标记 ^a:abc、aaaaaa等 $ 作为结束标记 c$:abc、cccc 等 \d 数字 3、4、9 等 正则字符 释义 举例 + 前面元素至少出现一次 ab+:ab、abbbb 等 * 前面元素出现0次或多次 ab*:a、ab、abb 等 ? 匹配前面的一次或0次 Ab?: A、Ab 等 ^ 作为开始标记 ^a:abc、aaaaaa等 $ 作为结束标记 c$:abc、cccc 等 \d 数字 3、4、9 等 \D 非数字 A、a、- 等 [a-z] A到z之间的任意字母 a、p、m 等 [0-9] 0到9之间的任意数字 0、2、9 等 \D 非数字 A、a、- 等 [a-z] A到z之间的任意字母 a、p、m 等 [0-9] 0到9之间的任意数字 0、2、9 等
注意:
1. 转义字符
>>> s'(abc)def'>>> m = re.search("(\(.*\)).*", s)>>> print m.group(1)(abc)re.match函数
re.match 尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none。
实例1:
#!/usr/bin/python# -*- coding: UTF-8 -*- import reprint(re.match('.group() print "hi:", mm print "sen_before:", sen sen = sen.replace(mm, mm.replace(",", "")) print "sen_back:", sen, '\n'结果
技巧
使用函数finditer(string[, pos[, endpos]]) | re.finditer(pattern, string[, flags]):
搜索string,返回一个顺序访问每一个匹配结果(Match对象)的迭代器。
参考代码3-2
sen = "abc,123,456,789,mnp"while 1: mm = re.search("\d,\d", sen) if mm: mm = mm.group() sen = sen.replace(mm, mm.replace(",", "")) print sen else: break结果
延伸
这样的程序针对具体问题,即数字3位一组,如果数字混杂与字母间,干掉数字间的逗号,即把“abc,123,4,789,mnp”转化为“abc,1234789,mnp”
思路
更具体的是找正则式“数字,数字”找到后用去掉逗号的替换
参考代码3-3
sen = "abc,123,4,789,mnp"while 1: mm = re.search("\d,\d", sen) if mm: mm = mm.group() sen = sen.replace(mm, mm.replace(",", "")) print sen else: breakprint sen结果
4. 中文处理之年份转换(例如:一九四九年--->1949年)
中文处理涉及到编码问题。例如下边的程序识别年份(****年)时
# -*- coding: cp936 -*-import rem0 = "在一九四九年新中国成立"m1 = "比一九九零年低百分之五点二"m2 = '人一九九六年击败俄军,取得实质独立'def fuc(m): a = re.findall("[零|一|二|三|四|五|六|七|八|九]+年", m) if a: for key in a: print key else: print "NULL"fuc(m0)fuc(m1)fuc(m2)运行结果
可以看出第二个、第三个都出现了错误。
改进——准化成unicode识别
# -*- coding: cp936 -*-import rem0 = "在一九四九年新中国成立"m1 = "比一九九零年低百分之五点二"m2 = '人一九九六年击败俄军,取得实质独立'def fuc(m): m = m.decode('cp936') a = re.findall(u"[\u96f6|\u4e00|\u4e8c|\u4e09|\u56db|\u4e94|\u516d|\u4e03|\u516b|\u4e5d]+\u5e74", m) if a: for key in a: print key else: print "NULL"fuc(m0)fuc(m1)fuc(m2)结果
识别出来可以通过替换方式,把汉字替换成数字。
参考
numHash = {}numHash['零'.decode('utf-8')] = '0'numHash['一'.decode('utf-8')] = '1'numHash['二'.decode('utf-8')] = '2'numHash['三'.decode('utf-8')] = '3'numHash['四'.decode('utf-8')] = '4'numHash['五'.decode('utf-8')] = '5'numHash['六'.decode('utf-8')] = '6'numHash['七'.decode('utf-8')] = '7'numHash['八'.decode('utf-8')] = '8'numHash['九'.decode('utf-8')] = '9'def change2num(words): print "words:",words newword = '' for key in words: print key if key in numHash: newword += numHash[key] else: newword += key return newworddef Chi2Num(line): a = re.findall(u"[\u96f6|\u4e00|\u4e8c|\u4e09|\u56db|\u4e94|\u516d|\u4e03|\u516b|\u4e5d]+\u5e74", line) if a: print "------" print line for words in a: newwords = change2num(words) print words print newwords line = line.replace(words, newwords) return line5. 多个手机号码,中间用|隔开
举例:
空值
12222222222
12222222222|12222222222
12222222222|12222222222|12222222444
表达式
s = "[\\d]{11}(\\|[\\d]{11})*|"
四. 推荐
Python正则表达式指南
到此这篇关于python正则表达式实例代码的文章就介绍到这了,更多相关python正则例子内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
本文实例讲述了Python使用正则表达式过滤或替换HTML标签的方法。分享给大家供大家参考,具体如下:python正则表达式关键内容:python正则表达式转义
本文实例介绍了Python通过正则表达式获取,去除(过滤)或者替换HTML标签的几种方法,具体内容如下python正则表达式关键内容:python正则表达式转义
本文实例讲述了Python松散正则表达式用法。分享给大家供大家参考,具体如下:Python允许用户利用所谓的松散正则表达式来完成这个任务。一个松散正则表达式和一
python根据正则表达式提取指定的内容正则表达式是极其强大的,利用正则表达式来提取想要的内容是很方便的事。下面演示了在python里,通过正则表达式来提取符合
本文实例讲述了Python爬虫之正则表达式基本用法。分享给大家供大家参考,具体如下:一、简介正则表达式,又称正规表示式、正规表示法、正规表达式、规则表达式、常规