正则表达式

正则表达式的用途可以理解为找出规律相同的一类东西,可以是其中一个,也可以是所有的。

例如:

密码:hadkfalifexxIxxfasdjifja134xxlovexx23345sdfxxyouxx8dfse

解密I love you

解密方法:找规律  xx需要的内容xx

常用符号:点号,星号,问号与括号

     .  :  匹配任意字符,换行符\n除外

     * :匹配前一个字符0次或无限次

     ? :匹配前一个字符0次或1

     .*:贪心算法 就像是一个胖子吃尽可能多的东西

   .*?:非贪心算法 就像是一个婴儿少量多餐

():括号内的数据作为结果返回

常用方法: findall search sub

findall 匹配所有符合规律的内容,返回包含结果的列表
Search :匹配并提 取第一个符合规律的内容,返回一个正则表达式对象( object)
Sub :替换符合规 律的内容,返回替换后的值

常用技巧
import re #这是指导入正则表达式的库文件
1. . 的使用
a = 'xyz123'
b = re.findall('x.',a)
print b
#输出是xy
a = 'xyz123'
b = re.findall('x..',a)
print b
#输出是xyz
#因此我们可以把.理解为占位符

2.*的使用 匹配前一个字符0次或无限次
a = 'xyxy123'
b = re.findall('x*',a)
print b
#['x','','x','','','','','']注意,最后面多了一个空
#*匹配前一个元素0次或多次,假设匹配0次,那么'x*'就只剩下'x',那么就会在a字符串里面寻找x,在第一、第三位置,找不到就是空
#留给大家一个问题,为什么最后面会多一个‘’,知道的请在后面评论中写下,因为我并不知道<img alt="微笑" src="http://static.blog.csdn.net/xheditor/xheditor_emot/default/smile.gif" />
3.?的使用 匹配前一个字符0次或1
a = 'xy123'
b = re.findall('x?',a)
print b
#['x','','','','','']注意,这里也跟上面一样,最后面多了一个''
#因为?匹配前面一个元素0次或1次,当匹配1次时,'x?'就变成‘x’,那么会去a中找x,找不到就为空
由于单个用的并不多,只需掌握(.*?)这种组合方式
1.先看一下.*的搭配
secret_code = hadkfalifexxIxxfasdjifja134xxlovexx23345sdfxxyouxx8dfse
b = re.findall('xx.*xx',secret_code)
print b
#['xxIxxfasdjifjal34xxlovexx23345sdfxxyouxx']
#像一个胖子尽可能的多吃
2..*?的使用
c = re.findall('xx.*?xx',secret_code)
print c
#['xxIxx','xxlovexx','xxyouxx']
#首先要满足条件,然后尽可能多的找满足条件的组合,即‘少量多餐’

接下来就是重点()的使用
d = re,findall('xx(.*?)xx'.secret_code)
print d
for each in d:
   print each
#['I','love','you']
#I love you,课件()可以返回我们需要的内容,而不包含多余的元素

然后
1.介绍一下re.S的使用

s = '''sdfxxhello
xxfsdfxxworldxxasdf'''

d = re.findall('xx(.*?)xx',s,re.S)
print d
#当去掉re.S 时会打印['fsdf'] 因为.不能匹配\n
#加上re.S则['hello\n','world'],因此我们知道,re.S就是让点的作用范围能包括\n
可以去Python正则表达式的库文件中查找对S的定义

接下来
2.对比findall和search的区别
s2 = 'asdfxxIxx123xxlovexxdfd'
f = re.search('xx(.*?)xx123xx(.*?)xx',s2).group(1)
print f
#I
#如果是2,love
f2 = re.findall('xx(.*?)xx123xx(.*?)xx',s2)
print f2[0][1]
#love
#自己可以调试来理解,f2是个队列,有一个元素,但是这个元素是个元组,只有当很长的字符串,有两个地方满足规律时。才会有两个元素

3.sub举例
s = '123asdfga123'
output = re.sub('123(.*?)123','123789123',s)
print output
#123789123
或者
output =  re.sub('123(.*?)123','123%d123'%789,s)
#123789123,%d类似于C语言
#re.sub的作用是在原字符串中匹配符合规律的内容,然后替换

常用技巧
import re
from re import *
from re import findall,search,sub,S 这时,可以在表达式中省略re,但是不推荐,因为很难读懂
不要用compile 多此一举,因为findall的定义中就包含
使用d\+匹配纯数字
a = 'asd123456ahdga'
b = re.findall('(\d+)',a)
print b
#'123456'
a = 'sda123456adh555afkj'
b = re.findall('(d\+)',a)
print b
#'123456','555'
















评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值