一、基本语法
.
表示除换行符(\n
)之外的任意字符,\
表示转义,\.
为取.
,[]
中的.
不需要转义[]
表示匹配其中的任意字符,用-
表示范围,^
表示取反[1-9a-zA-Z]\d
等同于0-9,\D
等同于非数字,\w
为字母或数字或下划线,\s
为空格
等价关系\d === [0-9]
,\D === [^0-9]
,\w === [0-9a-zA-Z_]
^
以……开头,$
以……结尾,\b
表示单词边界+
匹配1-∞,*
匹配0-∞,?
匹配0或1,{3}
匹配3次,{3,5}
匹配3-5,{3,}
匹配3-∞- 贪婪匹配
at{3,}
匹配至少3个t,非贪婪匹配at{3,}?
只匹配三个t - 前瞻后顾
1)A(?=B)
匹配出现在B之前的A;A(?!B)
匹配出现在不是B之前的A
2)(?<=A)B
匹配出现在A之后的B;(?<!A)B
匹配出现在不是A之后的B
(1)正向前瞻,\$(?=\d+)
,$
300和$abc表示匹配数字前的$,
(2)负向前瞻,\$(?!\d+)
,$300和$
abc表示匹配非数字前的$
(3)正向后顾,(?<=\$)\d+
,$300
和$abc表示匹配$后面的数字
(4)负向后顾,(?<!\$)\d+
,$300
和$abc和#100
表示匹配非$后面的数字
二、re模块
参考链接:https://blog.csdn.net/zaf0516/article/details/122734231
- 函数名
- (1)通过re模块的compile()函数编译得到的正则表达式对象(下面用regex表示)支持如下方法:
- (2)调用正则表达式对象的regex.match()、regex.fullmatch()和regex.search()得到的结果就是一个匹配对象,匹配对象支持以下方法和属性:
- 标识符flag
常用总结
re.match()
、re.search()
、re.finditer()
返回匹配对象,没有则返回None,需要用group()
取值re.findall(pattern,string,flags=0)
返回列表re.match()
:从头开始匹配,如果开头匹配成功则返回对象re.search()
:搜索整个字符串,默认返回第一个匹配成功
re.finditer()
:以迭代器形式返回所有满足匹配的数据re.findall()
:以列表形式返回所有满足匹配的数据
三、常见示例
1. 简单示例
2. 爬虫常见示例
- 利用
findall
匹配列表
元数据样式 | 识别后的样式 |
---|---|
row_pattern = r'<row tradedate="(.*?)" tradetime="(.*?)" period="(.*?)" value="(.*?)" />'
row_data = re.findall(row_pattern, rows_data)
for match in row_data:
tradedate, tradetime, period, value = match
res = {}
res['tradedate'] = tradedate
res['tradetime'] = tradetime
res['period'] = period
res['value'] = value
print(res)