
| . 表示要匹配除了 换行符 之外的任何 单个 字符。 |
| |
| |
| 苹果是绿色的 |
| .色 会匹配 绿色 |
| content = '''苹果是绿色的 |
| 橙子是橙色的 |
| 香蕉是黄色的 |
| 乌鸦是黑色的''' |
| |
| import re |
| p = re.compile(r'.色') |
| for one in p.findall(content): |
| print(one) |
| * 表示匹配前面的子表达式任意次,包括0次。 |
| |
| # 案例:色字出现0次或多次 |
| 苹果是绿色色的 |
| 色* 会匹配 色色 |
| |
| # 案例:任意单个字符出现多次 |
| 苹果是绿色色的 |
| 绿.* 会匹配 绿色色的 |
| + 表示匹配前面的子表达式一次或多次,不包括0次。 |
| # 案例:色字出现至少1次或多次 |
| 苹果是绿色色的 |
| 色+ 会匹配 色色 |
| |
| # 案例:任意单个字符出现多次 |
| 乌鸦,是黑色的 |
| 猴子, |
| ,.+ 会匹配 ,是黑色的 |

| 表达式 油{3} 就表示匹配 连续的 油 字 3次 |
| 表达式 油{3,4} 就表示匹配 连续的 油 字 至少3次,至多 4 次 |
| |
| source = '<html><head><title>Title</title>' |
| |
| import re |
| p = re.compile(r'<.*>') |
| |
| print(p.findall(source)) |
| |
| source = '<html><head><title>Title</title>' |
| |
| import re |
| |
| p = re.compile(r'<.*?>') |
| |
| print(p.findall(source)) |

| \. 表示匹配 . |
| |
| |
| content = '''苹果.是绿色的 |
| 橙子.是橙色的 |
| 香蕉.是黄色的''' |
| |
| import re |
| p = re.compile(r'.*\.') |
| for one in p.findall(content): |
| print(one) |
| |
| \d 匹配0-9之间任意一个数字字符,等价于表达式 [0-9] |
| |
| \D 匹配任意一个不是0-9之间的数字字符,等价于表达式 [^0-9] |
| |
| \s 匹配任意一个空白字符,包括 空格、tab、换行符等,等价于表达式 [\t\n\r\f\v] |
| |
| \S 匹配任意一个非空白字符,等价于表达式 [^ \t\n\r\f\v] |
| |
| \w 匹配任意一个文字字符,包括大小写字母、数字、下划线,等价于表达式 [a-zA-Z0-9_] |
| 缺省情况也包括 Unicode文字字符,如果指定 ASCII 码标记,则只包括ASCII字母 |
| |
| \W 匹配任意一个非文字字符,等价于表达式 [^a-zA-Z0-9_] |
-
缺省情况也包括 Unicode文字字符

-
只包含英文


| [abc] 可以匹配 a, b, 或者 c 里面的任意一个字符。等价于 [a-c] 。 |
| [a-c] 中间的 - 表示一个范围从a 到 c。 |
| |
| 一些元字符在方括号内失去了意义,变得和普通字符一样了。 |
| [akm.] 匹配 a k m . 里面任意一个字符 |
| |
| 如果在方括号中使用 ^ , 表示 非 方括号里面的字符集合。 |
| [^\d] 表示,选择非数字的字符 |
| 正则表达式可以设定 单行模式 和 多行模式 |
| 如果是 单行模式 ,表示匹配 整个文本 的开头位置。 |
| 如果是 多行模式 ,表示匹配 文本每行 的开头位置。 |
| |
| ^ 表示匹配文本的 开头 位置 |
| $ 表示匹配文本的 结尾 位置。 |
- 使用多行模式

| content = '''001-苹果价格-60 |
| 002-橙子价格-70 |
| 003-香蕉价格-80''' |
| |
| import re |
| p = re.compile(r'\d+$', re.MULTILINE) |
| for one in p.findall(content): |
| print(one) |
| content = '''苹果,苹果是绿色的 |
| 橙子,橙子是橙色的 |
| 香蕉,香蕉是黄色的''' |
| |
| import re |
| p = re.compile(r'^(.*),', re.MULTILINE) |
| for one in p.findall(content): |
| print(one) |
| |
| content = '''张三,手机号码15945678901 |
| 李四,手机号码13945677701 |
| 王二,手机号码13845666901''' |
| |
| import re |
| p = re.compile(r'^(.+),.+(\d{11})', re.MULTILINE) |
| for one in p.findall(content): |
| print(one) |
| import re |
| |
| names = '关羽; 张飞, 赵云, 马超, 黄忠 李逵' |
| |
| namelist = re.split(r'[;,\s]\s*', names) |
| print(namelist) |
| import re |
| |
| names = ''' |
| <a href='https://www.bilibili.com/video/av66771949/?p=1' target='_blank'>点击这里,边看视频讲解,边学习以下内容</a> |
| 这节讲的是牛顿第2运动定律 |
| |
| <a href='https://www.bilibili.com/video/av46349552/?p=125' target='_blank'>点击这里,边看视频讲解,边学习以下内容</a> |
| 这节讲的是毕达哥拉斯公式 |
| |
| <a href='https://www.bilibili.com/video/av90571967/?p=33' target='_blank'>点击这里,边看视频讲解,边学习以下内容</a> |
| 这节讲的是切割磁力线 |
| ''' |
| |
| |
| def subFunc(match): |
| |
| src = match.group(0) |
| |
| number = int(match.group(1)) + 6 |
| dest = f'/av{number}/' |
| print(f'{src} 替换为 {dest}') |
| |
| return dest |
| |
| newStr = re.sub(r'/av(\d+?)/', subFunc, names) |
| print(newStr) |
| /av66771949/ 替换为 /av66771955/ |
| /av46349552/ 替换为 /av46349558/ |
| /av90571967/ 替换为 /av90571973/ |
| |
| <a href='https://www.bilibili.com/video/av66771955/?p=1' target='_blank'>点击这里,边看视频讲解,边学习以下内容</a> |
| 这节讲的是牛顿第2运动定律 |
| |
| <a href='https://www.bilibili.com/video/av46349558/?p=125' target='_blank'>点击这里,边看视频讲解,边学习以下内容</a> |
| 这节讲的是毕达哥拉斯公式 |
| |
| <a href='https://www.bilibili.com/video/av90571973/?p=33' target='_blank'>点击这里,边看视频讲解,边学习以下内容</a> |
| 这节讲的是切割磁力线 |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律