Python正则表达式使用手册

正则在处理字符串的领域是无可非议的强大!正因过于强大,导致正则的使用门槛也不低。

我总结一些常见的匹配方式并结合Python代码例子,希望对大家使用正则的时候有所帮助!

字符匹配

字符匹配:匹配指定的字符或字符集合,例如**「单个字符」[a-z]「数字字符」**\d等。

import re

# 匹配单个字符
pattern = r"b[aeiou]t"
string = "bat, bet, bit, bot, but"
result = re.findall(pattern, string)
print(result) # ['bat', 'bet', 'bit', 'bot', 'but']

# 匹配数字字符
pattern = r"\d+"
string = "123 456 789"
result = re.findall(pattern, string)
print(result) # ['123', '456', '789']

位置匹配

位置匹配:匹配字符串的位置,例如 「行首」「行尾」「单词边界」 等。

import re

# 匹配行首
pattern = r"^The"
string = "The quick brown fox\nThe lazy dog"
result = re.findall(pattern, string, re.MULTILINE)
print(result) # ['The', 'The']

# 匹配单词边界
pattern = r"\bfox\b"
string = "The quick brown fox\njumps over the lazy dog"
result = re.findall(pattern, string)
print(result) # ['fox']

重复匹配

重复匹配:匹配重复出现的字符或字符集合,例如 「重复次数」「重复范围」 等。

import re

# 匹配重复次数
pattern = r"a{3}"
string = "aaa abc aa a"
result = re.findall(pattern, string)
print(result) # ['aaa']

# 匹配重复范围
pattern = r"\d{2,3}"
string = "12 123 1234 12345"
result = re.findall(pattern, string)
print(result) # ['12', '123', '123', '345']

分支匹配

分支匹配:匹配多个可选项,例如 「选项1」「选项2」

import re

# 匹配多个可选项
pattern = r"cat|dog"
string = "The quick brown fox jumps over the lazy dog"
result = re.findall(pattern, string)
print(result) # ['dog']

# 匹配多个可选项(忽略大小写)
pattern = r"cat|dog"
string = "The quick brown Fox jumps over the lazy Dog"
result = re.findall(pattern, string, re.IGNORECASE)
print(result) # ['Fox', 'Dog']

分组匹配

分组匹配:匹配特定的字符或字符集合,并将其标记为子表达式,例如 「提取子字符串」

import re

# 提取子字符串
pattern = r"(\d{4})-(\d{2})-(\d{2})"
string = "2022-03-02 is a good day"
result = re.findall(pattern, string)
print(result) # [('2022', '03', '02')]

后向引用匹配

后向引用匹配:匹配之前已经匹配的子表达式,例如查找重复单词。

import re

# 提取子字符串
pattern = r"(\d{4})-(\d{2})-(\d{2})"
string = "2022-03-02 is a good day"
result = re.findall(pattern, string)
print(result) # [('2022', '03', '02')]

贪婪匹配和懒惰匹配

贪婪匹配和非贪婪匹配:贪婪匹配是指匹配 「尽可能多」的字符,懒惰匹配是指匹配「尽可能少」 的字符。

import re

# 贪婪匹配
pattern = r"<.*>"
string = "<a>hello</a><b>world</b>"
result = re.findall(pattern, string)
print(result) # ['<a>hello</a><b>world</b>']

# 非贪婪匹配
pattern = r"<.*?>"
string = "<a>hello</a><b>world</b>"
result = re.findall(pattern, string)
print(result) # ['<a>', '</a>', '<b>', '</b>']

零宽度断言匹配

零宽度断言匹配:零断言可以匹配一个位置,而不是匹配一个字符。

零断言用于在匹配字符串时,指定匹配的位置前或后必须满足某些条件,从而实现更加精确的匹配。

在正则表达式中,有四种常用的零断言:

  1. 正向零断言:匹配满足正则表达式的字符后面的位置,但不包括这些字符。
import re

# 正向零断言,匹配hello后面是world的位置
pattern = r"hello(?=world)"
string = "hellopythonhelloworld"
result = re.findall(pattern, string)
print(result) # ['hello'] 
  1. 反向零断言:匹配不满足正则表达式的字符后面的位置,但不包括这些字符。
import re

# 反向零断言,匹配hello后面不是world的位置
pattern = r"hello(?!world)"
string = "hellopythonhelloworld"
result = re.findall(pattern, string)
print(result) # ['hello']
  1. 正向零宽度断言:匹配满足正则表达式的字符前面的位置,但不包括这些字符。
import re

# 正向零宽度断言,匹配hello前面是python的位置
pattern = r"(?<=python)hello"
string = "pythonhellopythonworld"
result = re.findall(pattern, string)
print(result) # ['hello']
  1. 反向零宽度断言:匹配不满足正则表达式的字符前面的位置,但不包括这些字符。
import re

# 反向零宽度断言,匹配hello前面不是python的位置
pattern = r"(?<!python)hello"
string = "pythonhellopythonworld"
result = re.findall(pattern, string)
print(result) # []

如果你对Python感兴趣的话,可以试试我整理的这份Python全套学习资料,0基础入门+进阶实战,你想要的我们都有。微信扫码免费领取

包括:Python永久使用安装包、Python web开发,Python爬虫,Python数据分析,人工智能、机器学习等学习教程。带你从零基础系统性的学好Python!

零基础Python学习资源介绍

一、Python所有方向的学习路线

Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
在这里插入图片描述

二、Python学习软件

工欲善其事,必先利其器。学习Python常用的开发软件都在这里了!
在这里插入图片描述

三、Python入门学习视频

还有很多适合0基础入门的学习视频,有了这些视频,轻轻松松上手Python~在这里插入图片描述

四、Python练习题

每节视频课后,都有对应的练习题哦,可以检验学习成果哈哈!
在这里插入图片描述

五、Python实战案例

光学理论是没用的,要学会跟着一起敲代码,动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。这份资料也包含在内的哈~在这里插入图片描述

六、Python面试资料

我们学会了Python之后,有了技能就可以出去找工作啦!下面这些面试题是都来自阿里、腾讯、字节等一线互联网大厂,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
在这里插入图片描述
在这里插入图片描述

七、资料领取

上述完整版Python全套学习资料已经上传CSDN官方,需要的小伙伴可自行微信扫描下方CSDN官方认证二维码免费领取

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值