38正则表达式记录

一.正则表达式

记录下目前常用的,后续用到新的会持续更新-0-0-

正则:用来匹配字符串的一门表达语言

练习:https://tool.oschina.net/regex/

1.正则支持普通字符

2.元字符(用一个符号来匹配一堆内容)

\d 能够匹配一个数字(0-9)
\w 能够匹配数字,字母,下划线(0-9,a-z,A-Z,_)
\W 除来数字,字母,下划线以外的内容(取反)
\D 除了数字以外的内容
[abc] 匹配a,b,b
[^abc] 除了a,b,b
. 除了换行符以外的其他所有内容都可以被匹配

3.量词

​ 控制,前面元字符出现的频次

+,前面的元字符出现1次或多次
*,前面的元字符出现0次或多次,贪婪匹配的,尽可能多的拿到数据
?,前面的元字符出现0次或1次

4.惰性匹配

.* 这个匹配离它最远的那个

.*? 惰性匹配,匹配到距离xxx最近的内容

import re


result = re.findall(r"\d+", "今天我有100块,买了3个蛋糕")
print(result)    # ['100', '3']

# result = re.search(r"\d+", "今天我有100块,买了3个蛋糕")   # 返回一个对象。 <re.Match object; span=(4, 7), match='100'> (拿到第一个结果就返回。从match中拿到数据,需要group()方法)
result = re.finditer(r"\d+", "今天我有100块,买了3个蛋糕")   # 返回一个迭代器对象,把所有结果放在迭代器里
print([i.group() for i in result])   # ['100', '3']

findall 与 finditer的区别:匹配大量字符串的时候,前者占内存资源较大。
预加载:        如果正则很长,可以用这个
obj = re.compile(r"\d+")          # 如果加了参数 complie里面加了 re.S 这个参数,表示可以让re匹配到换行符
result = obj.findall("今天我有100块,买了3个蛋糕")
print(result)                 #['100', '3']

列子:

s = """
<div class="abc">
    <div><a href="baidu.com">百度</a></div>
    <div><a href="baidu.com">腾讯</a></div>
    <div><a href="baidu.com">网易</a></div>
</div>
"""
obj = re.compile(r'<div><a href="(.*?)">(.*?)</a></div>')
result = obj.findall(s)
print(result)     # [('baidu.com', '百度'), ('baidu.com', '腾讯'), ('baidu.com', '网易')]
posted @ 2022-12-22 13:36  __username  阅读(27)  评论(0编辑  收藏  举报

本文作者:DIVMonster

本文链接:https://www.cnblogs.com/guangzan/p/12886111.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。