正则表达式
发布时间:2020-12-13 22:25:11 所属栏目:百科 来源:网络整理
导读:正则表达式的用途可以理解为找出规律相同的一类东西,可以是其中一个,也可以是所有的。 例如: 密码: hadkfalifexxIxxfasdjifja134xxlovexx23345sdfxxyouxx8dfse 解密 : I love you 解密方法:找规律 xx 需要的内容 xx ? 常用符号:点号,星号,问号与括
正则表达式的用途可以理解为找出规律相同的一类东西,可以是其中一个,也可以是所有的。 例如: 密码: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?','']注意,这里也跟上面一样,最后面多了一个'' #因为?匹配前面一个元素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则['hellon','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' (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |