Python 正则表达式基础

989 阅读3分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第6天,点击查看活动详情

正则表达式基础

正则表达式 (regular expression) 简单理解就是匹配文本的模式。换句话说,正则表达式允许我们定义一个抽象字符串(通常是结构化文本)来检查其他字符串是否匹配。 为了更直观的理解,我们通过一个例子进行解释。例如,我们可以将文本模式定义为以大写 L 开头并且之后仅包含小写 “o” 和 “a” 的单词:

需要比较的字符串是否匹配
Loao匹配
Moa不匹配(首字母并非 L)
Love不匹配(首字母 L 后仅可以包含 o 和 a,不包括 v)
Laaa匹配
Looaoa匹配
LAOO不匹配(首字母 L 后仅可以包含 o 和 a,不包括 A)

这只是一些简单的示例,正则表达式可能非常复杂且难以理解,但同时它们也非常有用,利用正则表达式,我们可以执行非常强大的模式匹配。

正则表达式应用

正则表达式具有非常广泛的应用场景:

  • 验证输入数据:例如,验证电话号码、邮箱等信息是否正确。
  • 字符串解析:从结构化字符串中检索数据,例如运行日志或网页数据等。
  • 查找:在一段长文本中查找某些内容的出现。例如,查找网页中的所有电子邮件。
  • 替换:查找一个或多个单词并将其替换为其他单词。例如,将所有 love 替换为 like

 

Python 正则表达式基础

re 模块是 Python 中用于处理正则表达式的内置库,在本节中,我们主要介绍 re.search() 函数的使用,该函数返回一个匹配对象,其中包含有关与模式匹配的信息。

由于正则表达式中的模式也被定义为字符串,为了与待匹配字符串进行区分,我们可以在模式字符串前面加上一个 r,例如 r'pattern'。这也是 Python 将文本标记为原始字符串的方式,这意味着其中的字符串并不会进行转义,而完全按字面本身解析。这意味着 “\” 用作反斜杠而不是转义符号,例如,在没有 r 前缀时,\n 表示换行符,而使用 r 前缀,r'\n' 表示字符串 \n

在正则表达式中可以使用某些特殊字符串表示字符串结尾、任意数字、任意字符、任意空白字符等。

导入 re 模块,匹配不在字符串开头的模式:

>>> import re
>>> re.search(r'ENJ', 'I ENJOY WATCHING MOVIE.')
<re.Match object; span=(2, 5), match='ENJ'>

匹配仅位于字符串开头的模式,使用符号 ^ 标记字符串的开始:

>>> re.search(r'^ENJ', 'I ENJOY WATCHING MOVIE.')
>>> re.search(r'^ENJ', 'ENJOY WATCHING MOVIE.')
<re.Match object; span=(0, 3), match='ENJ'>

 

仅匹配位于字符串末尾的模式,使用符号 $ 标记字符串的结尾:

>>> re.search(r'ENJ$', 'I ENJOY WATCHING MOVIE.')
>>> re.search(r'ENJ$', 'I ENJ')
<re.Match object; span=(2, 5), match='ENJ'>

匹配单词 “one” (不排除 onefold),但不匹配 someone 或 anyone,使用符号 \b 标记单词的开始或结束:

>>> match = re.search(r'one', string)
>>> string[:match.start()],string[match.start():match.end()],string[match.end():]
("It's possible to be bedfellows with some", 'one', ' on one issue, and at odds with them on another.')
>>> match = re.search(r'\bone',string)
>>> string[:match.start()],string[match.start():match.end()],string[match.end():]
("It's possible to be bedfellows with someone on ", 'one', ' issue, and at odds with them on another.')

正则表达式

如果仅匹配单词 “one”,需要使用模式 r'\bone\b'