📜  python 模式匹配 - Python (1)

📅  最后修改于: 2023-12-03 15:34:12.840000             🧑  作者: Mango

Python 模式匹配 - Python

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 可以方便地进行模式匹配。

Glob 模块

除了正则表达式,Python还提供了一个glob模块,它可以匹配路径名与正则表达式相似,用 *? 两个通配符表示任意个任意字符和任意一个字符。下面是使用 glob 的示例:

import glob

# 匹配当前目录下所有.py文件
files = glob.glob('*.py')

print(files)

输出:

['example.py', 'example2.py', 'example3.py']

此处匹配了当前目录下所有 .py 文件并返回文件名列表。

结论

Python 内置的字符串操作库支持各种模式匹配操作,包括正则表达式和 glob 模块。熟练地使用这些功能可以让我们更有效地处理字符串和文件。