正则在处理字符串的领域是无可非议的强大!正因过于强大,导致正则的使用门槛也不低。
我总结一些常见的匹配方式并结合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>']
零宽度断言匹配
零宽度断言匹配:零断言可以匹配一个位置,而不是匹配一个字符。
零断言用于在匹配字符串时,指定匹配的位置前或后必须满足某些条件,从而实现更加精确的匹配。
在正则表达式中,有四种常用的零断言:
- 正向零断言:匹配满足正则表达式的字符后面的位置,但不包括这些字符。
import re
# 正向零断言,匹配hello后面是world的位置
pattern = r"hello(?=world)"
string = "hellopythonhelloworld"
result = re.findall(pattern, string)
print(result) # ['hello']
- 反向零断言:匹配不满足正则表达式的字符后面的位置,但不包括这些字符。
import re
# 反向零断言,匹配hello后面不是world的位置
pattern = r"hello(?!world)"
string = "hellopythonhelloworld"
result = re.findall(pattern, string)
print(result) # ['hello']
- 正向零宽度断言:匹配满足正则表达式的字符前面的位置,但不包括这些字符。
import re
# 正向零宽度断言,匹配hello前面是python的位置
pattern = r"(?<=python)hello"
string = "pythonhellopythonworld"
result = re.findall(pattern, string)
print(result) # ['hello']
- 反向零宽度断言:匹配不满足正则表达式的字符前面的位置,但不包括这些字符。
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官方认证二维码免费领取