正则表达式(通常称为 regex)是一种强大的工具,广泛用于文本处理和模式匹配。在 Python 中,re 模块提供了丰富的正则表达式功能,使开发者能够高效处理复杂的文本, 在本文中,我们将从基础开始后续逐步深入学习正则表达式,并通过实用的代码示例演示如何在 Python 中使用它。
正则表达式是定义搜索模式的字符序列,它们可用于各种任务,例如搜索、编辑和作文本。
在本节中,让我们探索正则表达式的一些基本组成部分。
文本是正则表达式模式的最简单形式,因为它们与搜索字符串中的确切字符匹配。
例如,如果要在文本“The cat sat on the mat”中找到确切的单词“cat”,则必须使用与模式 cat 匹配的文本。
在正则表达式中,元字符是具有特殊含义和用途的符号:
• .匹配任何字符,但换行符除外。
• ^匹配字符串的开头。
• $匹配字符串的结尾。
• *匹配前一个元素的 0 个或多个重复项。
• +匹配前一个元素的 1 个或多个重复项。
• ?匹配前一个元素的 0 或 1 个重复项。
• {}匹配前一个元素的特定重复次数。
字符类匹配给定集中的任何字符。常见示例包括:
• [abc]:匹配任何字符 a、b 或 c。
• \d匹配任何数字(相当于 [0-9])。
• \w匹配任何单词字符(字母数字加下划线)。
• \s匹配任何空白字符。
量词指定字符或组的出现次数:
• *:0 或更大。
• +:1 或更多。
• ?:0 或 1。
• {n}:正好 n。
• {n,}:n 或更多。
• {n,m}:在 n 和 m 之间。
re是python中的标准模块,我们可以直接使用,不需要进行安装,接下来我们将展示如何使用该模块的一些基本实例。
该函数在字符串中搜索正则表达式模式的第一个匹配项。
例如,假设要提取字符串中的任何数字。我们可以编写以下 Python 代码:
import re
# Define the pattern
pattern = r"\d+"
# Define the text to analyz
text = "There are 123 apples."
# Apply the regex
match = re.search(pattern, text)
print(match.group())
运行结果:
123
让我们解释下pattern = r"\d+"
• 前缀定义了一个原始字符串,该字符串将反斜杠 () 视为 Literal 字符,而不是转义字符。r\
• \d匹配任何数字(相当于 [0-9])。
• +表示上一个模式(数字)必须出现一次或多次。
最后,如果函数找到匹配项,则变量将返回 match 对象。因此,对象的方法返回与找到的模式相对应的子字符串
该函数仅在字符串的开头检查匹配项,例如,如果我们想在先前定义的文本字符串的开头搜索数字匹配项,我们可以编写以下内容:
import re
# Define the pattern
pattern = r"\d+"
# Define the text to analyze
text = "There are 123 apples."
# Apply the regex
match = re.match(r"\d+", text)
print(match)
运行结果:
None
在这种情况下,提供的字符串中没有与应用的正则表达式规则的匹配项。
该函数在字符串中查找正则表达式模式的所有匹配项,并在列表中返回输出。
例如,如果你想找到一个字符串中的所有数字模式,你可以写成这样:
import re
pattern = r"\d+"
text = "There are 123 apples in 2 trees."
matches = re.findall(pattern, text)
print(matches)
运行结果:
['123', '2']
在这种情况下,在字符串中找到两个数值表达式。
该函数将匹配的正则表达式模式替换为替换字符串,例如,如果要将 “123” 替换为 “many”:
import re
# Define the pattern
pattern = r"\d+"
# Define the text to analyze
text = "There are 123 apples."
# Apply the regex
replaced_text = re.sub(r"\d+", "many", text)
print(replaced_text)
打印输出:
There are many apples.
请注意,该函数适用于它找到的所有匹配项, 因此,例如,以下代码示例:
import re
# Define the pattern
pattern = r"\d+"
# Define the text to analyze
text = "There are 123 apples in 3 trees."
# Apply the regex
replaced_text = re.sub(r"\d+", "many", text)
print(replaced_text)
输出:
There are many apples in many trees.
re.match()、re.search()、re.findall()比较相似,那么我们什么时候应该使用哪个更合适呢?
• re.search()搜索模式与字符串匹配的第一个位置,当需要查找字符串中第一次出现的模式时,无论它位于何处,都可以使用它。
• re.match()仅在字符串的开头搜索匹配项,使用它来检查字符串是否以特定模式开头。
• re.findall()查找字符串中某个模式的所有匹配项,并将它们作为字符串列表返回,当需要查找字符串中的所有模式匹配项时,请使用它。
更多相关技术内容咨询欢迎前往并持续关注好学星城论坛了解详情。
想高效系统的学习Python编程语言,推荐大家关注一个微信公众号:Python编程学习圈。每天分享行业资讯、技术干货供大家阅读,关注即可免费领取整套Python入门到进阶的学习资料以及教程,感兴趣的小伙伴赶紧行动起来吧。
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!