在软件开发或数据开发过程中,处理和分析文本数据是一项至关重要的技能。无论是数据清洗、信息提取还是日志分析,正则表达式(Regular Expression)都扮演着不可或缺的角色。它是一种强大的工具,通过简洁而优雅的模式匹配语言,可以有效地搜索、替换和解析文本。尽管正则表达式看似复杂,但一旦掌握,其应用将极大地提高工作效率,使复杂的文本处理任务变得轻松自如。
然而,要真正掌握正则表达式,仅仅了解其语法和基本规则是不够的。实践出真知,只有通过具体的实例操作,才能深入理解其强大之处并灵活运用。接下来我们介绍九个Python 正则表达式的示例,带您一步步探索正则表达式的魅力。从基础的字符串匹配到复杂的文本解析,每个案例都旨在帮助您在实践中掌握这项重要的技能,让您在处理文本时如虎添翼。
示例一:验证邮箱地址
验证邮箱地址的有效性是正则表达式的经典用例。以下是一个示例程序:
import re
def val_email(email):
pattern = r"^[a-zA-Z0-9]+@[a-zA-Z0-9]+\.[a-zA-Z]{2,}$"
if re.match(pattern, email):
print("有效的email")
else:
print("无效的email!!")
val_email(email="[email protected]")
val_email(email="snb/smartnotebook.tech")
val_email(email="[email protected]")
在这个例子中,使用了 Python 的
re
模块来编译一个匹配有效邮箱地址格式的正则表达式模式。然后,使用它的
match()
函数来检查
email
变量是否符合该模式。
在这个正则模式中,有几个关键点:
-
使用
[]
来表示一个范围。例如,
[a-zA-Z0-9]
可以匹配 0 到 9 之间的数字,A 到 Z 之间的大写字母,或 a 到 z 之间的小写字母。
-
^
表示行的开头。在这个的例子中,用它来确保文本必须以
[a-zA-Z0-9]
开头。
-
$
表示行的结尾。
-
\
用来转义特殊字符(允许在示例中匹配像
.
这样的字符)。
-
{n,m}
语法用来匹配前一个正则表达式的 n 到 m 次重复。使用了
{2,}
,这意味着前面的部分
[a-zA-Z]
应至少重复 2 次。这就是为什么 “[email protected]” 被识别为无效邮箱地址的原因。
-
+
表示匹配前一个正则表达式的 1 次或多次重复。例如,
ab+
将匹配一个 a 后跟任意数量的 b。
这个经典例子展示了在 Python 中使用正则表达式的一些基本语法。实际上,Python 的
re
模块是一颗隐藏的宝石,可以从中使用许多更多的技巧。
示例二:从字符串中提取数字
要从一段长文本中找到一些特殊字符,最直接的想法是使用 for 循环遍历所有字符并找到需要的字符。但实际上并不需要使用任何循环。正则表达式天生就是作为过滤器使用的。
import re
def extract_numbers(text):
pattern = r"\d+"
return re.findall(pattern, text)
print(extract_numbers("There are over 1000 views of Snb's articles."))
如上所示,
re.findall()
函数接收一个正则表达式和一个文本,可以方便地帮助找到所有需要的字符。
\d
用于在正则表达式中匹配一个数字。
示例三:验证电话号码
以下示例也是利用
\d
来检查有效的电话号码:
import re
def is_valid_phone_number(phone_number):
pattern = r"^\d{3}-\d{4}-\d{4}$"
return bool(re.match(pattern, phone_number))
print(is_valid_phone_number("137-1234-5678"))
print(is_valid_phone_number("13712345678"))
除了
\d
外,还在正则表达式中使用了
^
、
$
和
{n}
语法来确保字符串是一个有效的电话号码。
示例四:将文本分割为单词
在日常编程中,将长文本分割为单独的单词是另一个常见的需求。借助于 re 模块的 split() 函数,我们可以轻松完成这个任务:
print(re.split(r'\s+', 'a b c'))
print( re.split(r'[\s\,]+', 'a,b, c d'))
print(re.split(r'[\s\,\;]+', 'a,b;; c d'))
如上代码所示,使用