正则表达式的概念和用法
多练习,多使用,才能熟练掌握正则表达式
参考链接
######基本概念
在编写处理字符串的程序或者网页时,需要查找某些复杂规则的字符串。
正则表达式: 描述这些规则的工具
常用方法
- findall: 匹配所有符合规律的内容,以列表的方式返回
- Serch: 匹配并提取第一个符合规律的内容,以正则表达式对象(object)的形式返回
- Sub: 替换符合规律的内容,返回替换后的值
贪心和非贪心匹配
.*
贪心 匹配尽可能多secret_code = 'sdewsexxIxxdefrt12kkxxlovexx33kkxxyouxxkl' ... b = re.findall('xx.*xx',secret_code) print b
结果:多量少组合.*?
非贪心 匹配尽可能少c = re.findall('xx.*?xx',secret_code) print c
结果:少量多组合
-(.*?)
只返回括号内的数据,与上面不同 重要d = re.findall('xx(.*?)xx',secret_code)
print d
for each in d
print each
结果为: I love you 只匹配括号中即xx xx中间的字符
Python re库
re.py源文件 就是Python 正则表达式的源码介绍s = '''sdfxxhello
xxfsdfxxworldxxasdf'''
d = re.findall('xx(.*?)xx',s,re.S)
print d
结果: ['hello\n','world']
**re.S:表示包含换行符的任意字符** 没有则输出:fsdf
findall 和serach的区别
s2 = 'asdfxxIxx123xxlovexxdfd'
f = re.search('xx(.*?)xx123(.*?)xx',s2).group(1)
print f
结果是: If = re.search('xx(.*?)xx123(.*?)xx',s2).group(2)
print f
结果是: love
group代表我们匹配的括号有几个
f2 = re.findall('xx(.*?)xx123(.*?)xx',s2)
print f2[0][1]
f2在断点中调试为: f2={list}[('I','love')]
0={tuple}('I','love')
print结果是: love
findall: 匹配所有符合的内容,返回的是list
search: 匹配的是第一个符合的内容,返回的是object
确定只有一个内容的时候,使用search方法可以提高效率
sub的使用
s = '123abcdsdffrerg123'
se = re.sub('123(.*?)123','456789123',s)
print se
result : 456789123
analyse: 123和123之间包围的 用了括号只返回括号中内容
不建议使用compile
compile 是先进行编译 在进行匹配
源码中 def compile中也有compile 多此一举pattern = 'xx(.*?)xx'
new_pattern = re.compile(pattern,re.S)
output = re.findall(new_pattern,secret_code)
print output
匹配数字
a = 'asdfasf1234567fasd555fas'
b = re.finall('(/d+)',a)
print b
result: ['1234567','555']
‘(/d+)’表示只返回括号中的内容一定要学会使用
python 中正则表达式的使用
- 使用findall与serach从大量文本中匹配感兴趣的内容(先抓大再抓小技巧)
- 使用sub实现换页功能