python re findall search finditer complie 预加载
几个主要的元数据,表示单个匹配
\d #匹配数字
\w #匹配字母,数字,下划线
\D #/d的取反
\W # /w的取反
[abc] #其中的任意字符
[^abc] #其中的任意字符取反
. #所有内容,贪婪匹配,除了换行
有前置数据,后置描述
? #0/1个
-
#1个以上
-
#任意多个
{n} #n个
特别说明:
“.*?” #不贪婪匹配,一般是将需要匹配的内容用这个替换就可以获取到匹配的内容
re.findall #返回的是列表
re.search #返回match对象,且只匹配到第一个,后面就不匹配了
re.finditer #返回一个可以迭代对象,迭代对象里面是match对象
import re
s = """
要实现自动化数据库断言?其实很easy
课程链接:https://ke.qq.com/webcourse/index.html#cid=315793&term_id=100374766&taid=7225051863441
详细内容:
1. selenium web自动化断言操作
2. 批量获取并存储网页信息数据
3. Java实现数据库连接与查询
4. 数据库与web自动化结果对比断言
"""
# result = re.findall("\d+",s) #匹配连在一起的数字;返回匹配的,然后放入到列表中
# result = re.search("\w+",s) #匹配第一次匹配的字符,数字,下划线的多个,遇到特需符号完成,返回match对象,只有1个
# result = re.finditer("\D+",s) #匹配为可迭代对象,每一个值为一个match对象
#如下为re的预加载功能,可以将上面的cid 和 term_id的值取出来
obj = re.compile(r'ke.qq.com/webcourse/index.html#cid=(?P<cid>.*?)&term_id=(?P<term_id>.*?)&taid=7225051863441',)
# result = obj.findall(s) #返回列表,但是时匹配的元素放入到一个元组中,然后再放入到了列表
# result = obj.search(s) #找到对应的命名的内容,并匹配
# cid = result.group("cid")
# term_id = result.group("term_id")
# print(cid,term_id)
result = obj.search(s) #直接search到match的对象,直接用groupdict列出所有匹配的值
dict = result.groupdict()
print(dict)
# result = obj.finditer(s) #使用finditer需要将迭代对象列出来,然后用match对象;那我用这个finditer的作用是什么呢?每次都要解包才能用?
# for i in result:
# dict = i.groupdict()
# print(dict)