正则表达式手册 常用模式解析(6)

此为教程笔记

教程地址:https://study.163.com/course/courseMain.htm?courseId=1209401897

感谢老师:城市数据团大鹏

1.正则表达式快速上手

1.1 正则表达式是什么?

在这里插入图片描述

1.2 爬虫中正则表达式的作用是什么

在这里插入图片描述

2 正则表达式的模式

在这里插入图片描述
简单理解,就是原来表示转义字符的不再表示转义,而就是它原来的意思。如“\n”在python中表示换行,如果想要它表示“\n”,就要用r’\n’
在正则表达式中,一般都用r’‘写逻辑公式,避免遇到转义字符。是一种较懒的方法。
在这里插入图片描述
模式非常多,但主要分为以上6类。大部分模式以及对应的描述如下
描述

模式 描述
^ 匹配字符串的开头 “匹配位置”
$ 匹配字符串的末尾 “匹配位置”
import re

# 匹配位置
s = 'hello word!'
m = r'^h'   # 匹配模式,

# print(re.match(m,s))  # 匹配h开头的字符
#  结果 <re.Match object; span=(0, 1), match='h'>

m1 = r'!$'
# print(re.match(m1,s))  # 匹配!结尾的字符
# 结果为None,是因为match函数是从起始位置还是匹配,正确的写法如下

m2 = r'.*!$'
print(re.match(m2,s))  # 匹配!结尾的字符
# 结果:<re.Match object; span=(0, 11), match='hello word!'>

这里需要注意^和 的位置,^是在字符前面, 在字符后面

用于匹配内容的常用模式

在这里插入图片描述

在这里插入图片描述
示例
在这里插入图片描述

用于匹配次数

在这里插入图片描述
示例 贪婪匹配(re*)和非贪婪匹配(re*?)

s1 = 'abc1wabc1w'
print(re.match(r'.+[1w]',s1))
# 结果 <re.Match object; span=(0, 10), match='abc1wabc1w'>
print(re.match(r'.*[1w]',s1))  # 贪婪匹配,尽可能多的匹配,直到找到最后一个匹配项
# 结果 <re.Match object; span=(0, 10), match='abc1wabc1w'>
print(re.match(r'.*?[1w]','abc1wabc1w')) # 匹配到一个就停止
# 结果 <re.Match object; span=(0, 4), match='abc1'>

示例 re{n} 和re{n,m}

s2 = 'agfbbbcccbbrrb'
print(re.match(r'.*?[b]{2}',s2)) # 非贪婪匹配,匹配到两个b就停止
# <re.Match object; span=(0, 5), match='agfbb'>
print(re.match(r'.*[b]{2}',s2))  # 贪婪匹配,匹配两个b
# <re.Match object; span=(0, 11), match='agfbbbcccbb'>
print(re.match(r'.*[b]{1,2}',s2))  # 贪婪匹配,1到2个b
# <re.Match object; span=(0, 14), match='agfbbbcccbbrrb'>
print(re.match(r'.*?[b]{1,2}',s2))  # 非贪婪匹配,1到2个b
# <re.Match object; span=(0, 5), match='agfbb'>

3 字符搜索

在这里插入图片描述
re,match()从字符起始开始搜索,re.search()从字符中间任意位置搜索。
示例 re.findall()

s3 = 'one12 twothree 34 four'
print(re.findall(r'\d',s3)) # 找到所有数字
# 结果 ['1', '2', '3', '4']
print(re.findall(r'\d\d',s3))  # 找两个一组的
# ['12', '34']

4 字符替换与分割

替换

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

发布了76 篇原创文章 · 获赞 95 · 访问量 22万+

猜你喜欢

转载自blog.csdn.net/u014264373/article/details/105271746
今日推荐