re解析(正则表达式)

今天小编开始说说正则表达式,欢迎大家一起学习,留言,评论

re解析(及正则表达式):是一种使用表达式的方式对字符串进行匹配的语法规则。
优点:速度快,效率高,准确性高
缺点:小白上手难度较大

正则语法:使用字符串进行排列组合来匹配字符串。
好玩的测试环境:https://www.oschina.net/(中在线工具进行测试)
在这里插入图片描述
正则元字符:
常见元字符

.		匹配换行符外的任意字符
 \w		匹配字母或数字或下划线
 \s		匹配空白符
 \d		匹配数字
 \n		匹配一行换行符
 \t		匹配一个制表符
 
^		匹配字符串开始
$		匹配字符串的结尾

\W		匹配非字母或数字或下划线
\D		匹配非数字
\S		匹配非空白符
a|b		匹配字符a到b
()		匹配括号内的表达式,也表示一个组
[...]		匹配字符组中的字符
[^...]		匹配除了匹配字符组中的所以字符

量词:(例:/d{5} 匹配5次数字)

*		重复零次或更多次
+		重复一次或更多次
?		重复零次或一次
{
    
    n} 	重复n次
{
    
    n,}	重复n次或更多次
{
    
    n,m}	重复n到m次

贪婪匹配和惰性匹配

.*		贪婪匹配(匹配最多的)
.*?		惰性匹配(回溯算法,匹配最少的)

惰性匹配:
在这里插入图片描述
贪婪匹配:
在这里插入图片描述
python中正则匹配:
re模块:

import re #导入模块
#findall匹配字符串中所有符合正则的内容
lst=re.findall("\d+","基本的电话号码,110,120,119")
print(lst)#['110', '120', '119']

#finditer匹配字符串中所以内容【返回迭代器】
it=re.finditer("\d+","基本的电话号码,110,120,119")
for i in it :#读取可迭代对象
    print(i.group())#110,120,119
#search返回结果是math对象,拿数据.group(),找到一个结果就返回
s=re.search("\d+","基本的电话号码,110,120,119")
print(s.group())#110
#match从头匹配,找到一个结果就返回,不在头就会报错
m=re.match(r"\d+","110,120,119")
print(s.group())#110
#预加载正则表达
obj=re.compile(r"\d+")
ret=obj.finditer('基本的电话号码,110,120,119')
for i in ret :
    print(i.group())#110,120,119

从一句话中提取需要内容:

import re
s="""
<div class='jay'><sqan id ='1'>李白></span></div>
<div class='jj'><sqan id ='2'>杜甫></span></div>
<div class='jolin'><sqan id ='3'>李时珍></span></div>
<div class='jab'><sqan id ='4'>陆游></span></div>
<div class='tory'><sqan id ='5'>苏轼></span></div>
<div class='tist'><sqan id ='6'>白居易></span></div>

"""
obj=re.compile(r"<div class='.*?'><sqan id ='\d+'>.*?</span></div>",re.S)#re.S 让.腝匹配换行符
result=obj.finditer(s)
for i in result :
    print(i)
#(?P<分组名字>正则)获取内容
obj1=re.compile(r"<div class='.*?'><sqan id ='\d+'>(?P<tist>.*?)></span></div>",re.S)#在tist中取需要内容
s=obj1.finditer(s)
for it in s :
    print(it.group("tist"))

现象:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_47514459/article/details/114494220