Python中的正则表达式

您是否曾经想知道在文档中查找某些文本或确保文本符合某种格式(例如,例如电子邮件地址)和其他类似操作的关键是什么?

此类操作的关键是正则表达式(regex) 。 让我们看一下正则表达式的一些定义。 在Wikipedia中,正则表达式的定义如下:

定义搜索模式的字符序列,主要用于与字符串进行模式匹配或字符串匹配(即类似“查找和替换”的操作)。 这个概念出现于1950年代,当时美国数学家Stephen Kleene将常规语言的描述形式化,并与Unix文本处理实用程序ed(编辑器)和grep(过滤器)共同使用。

来自regular-expressions.info的另一个不错的定义是:

正则表达式(简称regex或regexp)是用于描述搜索模式的特殊文本字符串。 您可以将正则表达式视为类固醇的通配符。 您可能熟悉通配符,例如* .txt,可在文件管理器中查找所有文本文件。 正则表达式等效为。* \。txt $

我知道正则表达式的概念可能仍然听起来有些模糊。 因此,让我们看一下正则表达式的一些示例,以更好地理解该概念。

正则表达式的例子

在本节中,我将向您展示一些正则表达式示例,以帮助您进一步理解该概念。

假设您有此正则表达式:

/abder/

这只是在告诉我们仅匹配“ abder ”一词。

那这个正则表达式呢?

/a[nr]t/

您可以按以下方式阅读此正则表达式:找到一个文本模式,使第一个字母为a ,最后一个字母为t ,并且在这些字母之间输入nr 。 因此,匹配的词是antart

现在让我给你一个小测验。 您将如何编写以ca开头并以以下一个或所有以下字符tbr结尾的正则表达式? 是的,此正则表达式可以编写如下:

/ca[tbr]/

如果看到以抑扬音^开头的正则表达式,则表示匹配以^后面提到的字符串开头的字符串。 因此,如果下面有正则表达式,则它与以This开头的字符串匹配。

/^This/

因此,在以下字符串中:

My name is Abder
This is Abder
This is Tom

基于正则表达式/^This/ ,将匹配以下字符串:

This is Abder
This is Tom

如果我们想匹配以某个字符串结尾的字符串怎么办? 在这种情况下,我们使用美元符号$ 。 这是一个例子:

Abder$

因此,在上面的字符串(三行)中,将使用此正则表达式匹配以下模式:

My name is Abder
This is Abder

好吧,您如何看待此正则表达式?

^[A-Z][a-z]

我知道乍一看似乎很复杂,但让我们逐一介绍一下。

我们已经看到了抑扬音^是什么。 这意味着匹配以某个字符串开头的字符串。 [AZ]表示大写字母。 因此,如果我们阅读正则表达式的这一部分: ^[AZ] ,它告诉我们匹配以大写字母开头的字符串。 最后一部分[az]表示找到以大写字母开头的字符串后,将跟着字母中的小写字母。

那么,以下哪个字符串将使用此正则表达式进行匹配? 如果不确定,可以使用Python,如我们在下一节中看到的那样,以测试您的答案。

abder
Abder
ABDER
ABder

正则表达式是一个非常广泛的主题,这些示例只是为了让您了解它们的含义以及我们为什么使用它们。

RexEgg是学习更多有关正则表达式并查看更多示例的不错参考。

Python中的正则表达式

现在让我们进入有趣的部分。 我们想看看如何在Python中使用上述某些正则表达式。 我们将用于在Python中使用正则表达式的模块是re模块。

第一个例子是关于找到abder这个词。 在Python中,我们将执行以下操作:

import re
text = 'My name is Abder'
match_pattern = re.match(r'Abder', text)
print match_pattern

如果运行上面的Python脚本,将得到输出: None

该脚本可以正常工作,但是问题在于功能match()工作方式。 如果我们返回到re模块文档,这就是match()函数的作用:

如果字符串开头的零个或多个字符与正则表达式模式匹配,则返回相应的匹配对象。 如果字符串与模式不匹配,则返回None;否则返回false。 请注意,这与零长度匹配不同。

呵呵,由此可见,仅当在字符串开头找到匹配项时, match()才会返回结果。

我们可以改用基于文档的search()函数:

扫描字符串以查找正则表达式模式产生匹配项的第一个位置,然后返回相应的匹配对象。 如果字符串中没有位置与模式匹配,则返回None;否则,返回None。 请注意,这与在字符串中的某个点找到零长度匹配不同。

因此,如果我们编写上述脚本,但是使用search()而不是match() ,则会得到以下输出:

<_sre.SRE_Match object at 0x101cfc988>

也就是说,已返回一个match object

如果要返回结果(字符串匹配),请使用group()函数。 如果要查看整个匹配项,请使用group(0) 。 从而:

print match_pattern.group(0)

将返回输出: Abder

如果我们在上一节中使用第二个正则表达式,即/a[nr]t/ ,则可以用Python编写,如下所示:

import re
text = 'This is a black ant'
match_pattern = re.search(r'a[nr]t', text)
print match_pattern.group(0)

该脚本的输出为: ant

结论

这篇文章越来越长,Python中的正则表达式主题肯定需要多于一篇文章,即使不是一本书本身。

但是,本文旨在为您提供快速入门和自信,让您进入Python正则表达式领域。 您可以参考re文档以了解有关此模块以及如何深入了解本主题的更多信息。

翻译自: https://code.tutsplus.com/tutorials/regular-expressions-in-python--cms-25880

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值