正则表达式
匹配字符串的一门语言
1. 普通字符串
2. 元字符,一个符号匹配一堆内容
\d 匹配一个数字
\D 对 \d 取反
\w 匹配一个字母(大写或者小写),数字,下划线_
\W 对\w取反
[abc] 匹配a,b,或者c
[^abc] 不匹配a,b,或者c
. 除了换行符以外任何字符都能匹配
量词,控制元字符出现的次数
+ 表示前面的元字符出现1次或者多次
* 表示前面的元字符出现0次或者多次,贪婪匹配,尽可能多的匹配出现的内容
? 表示前面的元字符出现0次或者1次
惰性匹配
案例
玩儿吃鸡游戏,晚上一起玩游戏,干嘛呢?打游戏啊
玩儿.*游戏 (贪婪匹配)
匹配到的结果是:玩儿吃鸡游戏,晚上一起玩游戏,干嘛呢?打游戏
惰性匹配 .*? 匹配到距离最近的内容
<div class="img"><div>小团团</div><div>露脸了</div></div>
<div>*.?</div> 匹配到的是<div>小团团</div>和<div>露脸了</div>
python 正则模块re
import re
findall,匹配所有符合条件的,返回的是列表
res = re.findall(r"\d+","我今天有100块,买了8个奶酪")
print(res) 返回 [100,8]
search 只拿到第一个结果就返回
res = re.search(r"\d+","我今天有100块,买了8个奶酪")
print(res.group()) 返回 100
finditer 把匹配到的结果放在迭代器中
res = re.finditer(r"\d+","我今天有100块,买了8个奶酪")
print(res) 返回 <callable_iterator object at 0x000001A054487C40>
for item in res:
print(item.group())
预加载
re.compile()
obj = re.compile(r"\d+")
obj.findall() 直接写要匹配的字符串即可
obj.search()
obj.finditer()
res=obj.findall("今天100人,一共800元")
print(res)