正则表达式概述
:正则表达式,又称正规表示式、正规表示法、正规表达式、规则表达式、常规表示法(英语:Regular Expression,在代码中常简写为regex、regexp或RE),是计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串。在很多文本编辑器里,正则表达式通常被用来检索、替换那些匹配某个模式的文本。
Regular Expression的“Regular”一般被译为“正则”、“正规”、“常规”。此处的“Regular”即是“规则”、“规律”的意思,Regular Expression即“描述某种规则的表达式”之意。
目的 给定一个正则表达式和另一个字符串,我们可以达到如下的目的:
1、给定的字符串是否符合正则表达式的过滤逻辑(称作“匹配”)
2、给定的字符串是否符合正则表达式的过滤逻辑(称作“匹配”)
compile 函数:
compile 函数用于编译正则表达式,生成一个 Pattern 对象,它的一般使用形式如下:
import re 将正则表达式编译成 Pattern 对象 pattern = re.compile(r'\d+')
@match:从起始位置开始查找,一旦符合正则规则,则返回结果,如果不符合返回None并且是一次匹配。
用时需要导入re模块
例题:
import re
sub = 'HAhahaha'
ret = re.match('[A-Z]',sub)
print(ret.group)
单纯的?号表示匹配一个字符或0次字符
后面加?号代表非贪婪匹配,尽可能少的
正则中的{a,b}代表a到b次
正则分组与逻辑等
1、匹配任意一个表达式
例题:
import re
sub = '2658655@qq.com'
sub1='764431321@qq163.com'
ret = re.match('\d+@qq.com| \d+@163.com',sub)
print(group())
ret = re.match('\d+@qq.com| \d+@163.com',sub1)
print(group())
2、(ab)将括号中的字符串作为一个分组
ret = re.match('\d+@(qq | 163).com',sub)
print(group())
ret = re.match('\d+@(qq | 163).com',sub1)
print(group())
\num 引用分组num匹配到字符串:
-- coding:utf-8 --
import re
emails = ['ljhyigehaoren@sina.com','22958081@qq.com','asncswncl@qq.cn','asncswncl@163.cn',]
for i in emails:
ret = re.match('[a-z0-9]+@(sina|qq|163).(com|cn)',i)
if ret:
print(ret,i)
(?P)和(?P=name)的用法:
ret = re.findall('<(?P\w+)>\d+<(?P=name1)>','123456')
print(ret)
re模块的高级用法:
import re
ret = re.search(r"\d+", "阅读次数为 9999")
ret.group()
运行结果:
'9999'
findall:
上面的 match 和 search 方法都是一次匹配,只要找到了一个匹配的结果就返回。然而,在大多数时候,我们需要搜索整个字符串,获得所有匹配的结果。
import re
ret = re.findall(r"\d+", "python = 9999, c = 7890, c++ = 12345")
print(ret)
运行结果:
['9999', '7890', '12345']
sub:
import re
ret = re.sub(r"\d+", '998', "python = 997")
print(ret)
运行结果:
python = 998
split:
根据匹配进行切割字符串,并返回一个列表
import re
ret = re.split(r":| ","info:xiaoZhang 33 shandong")
print(ret)
运行结果:
['info', 'xiaoZhang', '33', 'shandong']
finditer
finditer方法的行为跟 findall 的行为类似,也是搜索整个字符串,获得所有匹配的结果。但它返回一个顺序访问每一个匹配结果(Match 对象)的迭代
import re
ret = re.finditer('ha',baseStr)
print(type(ret))
print(ret)
for item in ret:
print(type(item))
print(item.group())
贪婪和非贪婪:
*? 重复任意次,但尽可能少重复
+? 重复1次或更多次,但尽可能少重复
?? 重复0次或1次,但尽可能少重复
mysql正则查询:
select * from studentinfo where student_name regexp '^牛';