专栏名称: 新语数据故事汇
《新语数据故事汇,数说新语》科普数据科学、讲述数据故事,深层次挖掘数据价值。
目录
相关文章推荐
51好读  ›  专栏  ›  新语数据故事汇

文本处理利器:Python正则表达式的9个实用案例

新语数据故事汇  · 公众号  ·  · 2024-07-07 19:26

正文

在软件开发或数据开发过程中,处理和分析文本数据是一项至关重要的技能。无论是数据清洗、信息提取还是日志分析,正则表达式(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'))

如上代码所示,使用







请到「今天看啥」查看全文