python中正则表达式的使用详解(2)
result=prog.match(string)
##这个等同于
result=re.match(r"(?<=<li>).*?(?=</li>)",string)
##但是如果这个正则需要在程序匹配多次,那么通过正则表达式对象的方式效率会更高
接下来就是查找了,假设我们的html结果已经以html的格式存放在text中,那么通过
result_list = re.findall(r"(?<=<li>).*?(?=</li>)",text)
便可以取得所需的结果列表.
二.替换
使用正则表达式进行替换非常的灵活.
比如之前我在阅读Trac这个系统中wiki模块的源代码的时候,就发现其wiki语法的实现就是通过正则替换进行的.
在使用替换的时候会涉及到正则表达式中的Group分组的概念.
假设wiki语法中使用!表示转义字符即感叹号后面的功能性字符会原样输出,粗体的语法为
写道
'''这里显示为粗体'''
那么有正则表达式为
r"(?P<bold>!?''')"
这里的?P<bold>是Python正则语法中的一部分,表示其后的group的名字为"bold"
下面是替换时的情景,其中sub函数的第一个参数是pattern,第二个参数可以是字符串也可以是函数,如果是字符串的话,那么就是将目标匹配的结果替换成指定的结果,而如果是函数,那么函数会接受一个match object的参数,并返回替换后的字符串,第三个参数便是源字符串.
result = re.sub(r"(?P<bold>!?''')", replace, line)
每当匹配到一个三单引号,replace函数便运行一次,可能这时候需要一个全局变量记录当前的三单引号是开还是闭,以便添加相应的标记.
在实际的trac wiki的实现的时候,便是这样通过一些标记变量,来记录某些语法标记的开闭,以决定replace函数的运行结果.
--------------------
示例
一. 判断字符串是否是全部小写
代码
# -*- coding: cp936 -*-
import re
s1 = 'adkkdk'
s2 = 'abc123efg'
an = re.search('^[a-z]+$', s1)
if an:
print 's1:', an.group(), '全为小写'
else:
print s1, "不全是小写!"
an = re.match('[a-z]+$', s2)
if an:
print 's2:', an.group(), '全为小写'
else:
print s2, "不全是小写!"
结果
究其因
1. 正则表达式不是python的一部分,利用时需要引用re模块
2. 匹配的形式为: re.search(正则表达式, 带匹配字串)或re.match(正则表达式, 带匹配字串)。两者区别在于后者默认以开始符(^)开始。因此,
re.search('^[a-z]+$', s1) 等价于 re.match('[a-z]+$', s2)
3. 如果匹配失败,则an = re.search('^[a-z]+$', s1)返回None
group用于把匹配结果分组
例如
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
1)正则表达式中的三组括号把匹配结果分成三组
group() 同group(0)就是匹配正则表达式整体结果
group(1) 列出第一个括号匹配部分,group(2) 列出第二个括号匹配部分,group(3) 列出第三个括号匹配部分。
2)没有匹配成功的,re.search()返回None
3)当然郑则表达式中没有括号,group(1)肯定不对了。
二. 首字母缩写词扩充
具体示例
FEMA Federal Emergency Management Agency
IRA Irish Republican Army
DUP Democratic Unionist Party
FDA Food and Drug Administration
OLC Office of Legal Counsel
分析
缩写词 FEMA
分解为 F*** E*** M*** A***
规律 大写字母 + 小写(大于等于1个)+ 空格
参考代码
- 上一篇:Python入门篇之编程习惯与特点
- 下一篇:基于python编写的微博应用