📅  最后修改于: 2023-12-03 15:34:12.840000             🧑  作者: Mango
Python 是一种高级编程语言,具有各种特性和库的支持,使得在处理大量数据和使用算法时变得更加容易。其中一个最重要的特性是其内置库,支持各种字符串操作,包括模式匹配。在本文中,我们将介绍Python中的模式匹配及其用法。
正则表达式是一种强大的字符串处理工具,可以用于匹配特定模式的文本。Python 中内置模块 re
可以实现正则表达式功能,供我们使用。首先,让我们了解一些正则表达式的符号:
.
表示任何字符*
表示前面字符的 0 或多个副本+
表示前面字符的 1 或多个副本?
表示前面字符可选\w
表示字符集 [a-zA-Z0-9_]
\d
表示数字字符集 [0-9]
\s
表示空白字符[]
内包含的字符集,例如 [abc]
匹配 a 或 b 或 c^
表示开头$
表示结尾现在,让我们看一下如何实现正则表达式的模式匹配:
import re
# 匹配 'cat' 或 'dog'
pattern = r'cat|dog'
# 匹配 'bat', 以 'b' 开头,随后是 1 个或多个字符,以 't' 结束
pattern2 = r'b.+t'
# 匹配 3 个小写字母
pattern3 = r'[a-z]{3}'
# 匹配 1 个或多个数字
pattern4 = r'\d+'
# 匹配 1 个或多个空格字符
pattern5 = r'\s+'
# 匹配邮箱地址
pattern6 = r'\b[A-Za-z0-9._%+-]+@[A-Za-z]+\.[A-Z|a-z]{2,}\b'
text = 'This is a cat, that is a dog. bat, bbfat, bedt, cat bat'
# 找到第一个匹配的字符串
m = re.search(pattern, text)
print(m.group())
# 找到所有匹配的字符串
m2 = re.findall(pattern2, text)
print(m2)
# 替换匹配的字符串
m3 = re.sub(pattern, 'horse', text)
print(m3)
# 切分字符串
m4 = re.split(pattern5, text)
print(m4)
# 匹配邮箱地址
m5 = re.findall(pattern6, 'abc@example.com, xyz@something.edu, li@abc')
print(m5)
输出:
cat
['bat', 'bbfat', 'bedt', 'bat']
This is a horse, that is a horse. horse horse, horse horse
['This', 'is', 'a', 'cat,', 'that', 'is', 'a', 'dog.', 'bat,', 'bbfat,', 'bedt,', 'cat', 'bat']
['abc@example.com', 'xyz@something.edu']
通过使用模块 re
可以方便地进行模式匹配。
除了正则表达式,Python还提供了一个glob
模块,它可以匹配路径名与正则表达式相似,用 *
和 ?
两个通配符表示任意个任意字符和任意一个字符。下面是使用 glob
的示例:
import glob
# 匹配当前目录下所有.py文件
files = glob.glob('*.py')
print(files)
输出:
['example.py', 'example2.py', 'example3.py']
此处匹配了当前目录下所有 .py
文件并返回文件名列表。
Python 内置的字符串操作库支持各种模式匹配操作,包括正则表达式和 glob
模块。熟练地使用这些功能可以让我们更有效地处理字符串和文件。