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', '网易')]
本文来自博客园,作者:__username,转载请注明原文链接:https://www.cnblogs.com/code3/p/16998364.html