re模块与正则表达式之间的关系
1.正则表达式是一门独立的技术,任何语言都可以使用
2.python中需要使用re模块才能使用正则
正则是用来筛选字符串中特定的内容, 只要是reg...一般情况都和正则有关
字符组 [ ]
一个字符串里面的表达式都是或的关系, 正则:[0-9a-fA-F], 可以匹配数字,大小写形式的a~f,用来验证十六进制字符, ^与$符连用 会精准限制匹配的内容,匹配内容应与两者之间的内容一致
abc|ab 一定要将长的放在前面
^ 直接写在外面 限制字符串的开头
[^] 除了[]里写的字符 其他都要
正则在匹配的时候默认都是贪婪匹配(尽量匹配多的),通过在量词后面加上一个?就可以将贪婪匹配变成非贪婪匹配(惰性匹配)
量词必须跟在正则符号的后面,量词只能能够限制紧挨着它的那一个正则符号
分组:当多个正则符号需要重复多次的时候或者当做一个整体进行其他操作,那么可以分组的形式分组在正则的语法中就是()
import re res = re.findall('[a-z]+','eva egon,jason') # findall('正则表达式','带匹配的字符串') print(res) # ['eva', 'egon', 'jason']
# 将符合正则表达式的内容以列表的形式返回
import re res = re.search('a','eva egon jason') # search不会直接返回匹配的结果,而是返回一个对象 print(res.group()) # a 必须调用group才能看到匹配结果
# 1.search只会依据正则查一次 只要查到了结果 就不会再往后查找
2.当查找的结果不存在的情况下 调用group直接报错
import re res = re.match('e','eva egon jason') print(res) print(res.group()) #e
# 1.match只会匹配字符串的开头部分
2.当字符串的开头不符合匹配规则的情况下 返回的也是None 调用group也会报错
import re ret = re.split('[ab]','abcd') # 先按'a'分割得到''和'bcd',在对''和'bcd'分别按'b'分割 print(ret) # ['', '', 'cd']
import re ret = re.sub('d','H','1a3b4cd',2) # 将数字替换成'H',参数2表示只替换2个 # sub('正则表达式','新的内容','待替换的字符串',n) print(ret) #HaHb4cd
import re ret = re.subn('d','H','1a3b4cd',2) # 将数字替换成'H',返回元组(替换的结果,替换了多少次) print(ret) # ('HaHb4cd', 2)
import re obj = re.compile('d{3}') #将正则表达式编译成为一个 正则表达式对象,规则要匹配的是3个数字 ret = obj.search('abc123eeee') #正则表达式对象调用search,参数为待匹配的字符串 res1 = obj.findall('347982734729349827384') print(ret.group()) #结果 : 123 print(res1) #结果 : ['347', '982', '734', '729', '349', '
import re ret = re.finditer('d', 'ds3sy4784a') #finditer返回一个存放匹配结果的迭代器 print(next(ret).group()) # 等价于ret.__next__()) 3 print([i.group() for i in ret]) #查看剩余的左右结果 ['4', '7', '8', '4']
import re res = re.search('^[1-9](?P<password>d{14})(?P<username>d{2}[0-9x])?$','110105199812067023') print(res.group()) # 110105199812067023 print(res.group('password')) #10105199812067 print(res.group(1)) #10105199812067
import re ret1 = re.findall('www.(baidu|oldboy).com', 'www.oldboy.com') ret2 = re.findall('www.(?:baidu|oldboy).com', 'www.oldboy.com') # 忽略分组优先的机制 print(ret1,ret2) # ['oldboy'] ['www.oldboy.com'] ['oldboy']这是因为findall会优先把匹配结果组里内容返回,如果想要匹配结果,取消权限即可
import re ret=re.split("d+","eva3egon4yuan") print(ret) #结果 : ['eva', 'egon', 'yuan'] ret1=re.split("(d+)","eva3egon4yuan") print(ret1) #结果 : ['eva', '3', 'egon', '4', 'yuan']