Python中的正则表达式【附示例】:如何实现?

已发表: 2021-01-29

在处理来自任何来源的原始数据时,提取正确的信息非常重要,这样才能从数据中获得有意义的见解。 有时很难从数据中提取特定模式,尤其是在文本数据的情况下。

文本数据由通过调查表、报废网站和其他来源收集的信息段落组成。 使用 pandas 函数或其他自定义函数对不同的字符串访问器进行 Channing 可以完成工作,但如果需要获得更具体的模式怎么办? 正则表达式可以轻松完成这项工作。

目录

什么是正则表达式 (RegEx)?

正则表达式是字符串的一组字符的表示。 它为字符串中的特定模式提供了一个通用公式,有助于从数据池中分离出正确的信息。 该表达式通常由有助于形成规则的符号或字符组成,但乍一看,它可能看起来很奇怪且难以掌握。 这些符号具有此处描述的相关含义。

学习世界顶尖大学的数据科学课程获得行政 PG 课程、高级证书课程或硕士课程,以加快您的职业生涯。

RegEx 中的元字符

  1. '.':是通配符,匹配单个字符(任何字符,但只有一次)
  2. ^:表示字符串的开始
  3. $:表示字符串的结尾
  4. [ ]:匹配 [ ] 中的一组字符
  5. [az]:匹配字符 a,b,...,z 的范围之一
  6. [^abc] : 匹配不是 a、b 或 c 的字符。
  7. a|b:匹配 a 或 b,其中 a 和 b 是字符串
  8. () : 为操作符提供作用域
  9. \ :启用特殊字符(\t、\n、\b、\.)的转义
  10. \b:匹配单词边界
  11. \d :任何数字,相当于 [0-9]
  12. \D:任何非数字,等价于 [^0-9]
  13. \s :任何空格,相当于 [ \t\n\r\f\v]
  14. \S : 任何非空格,等价于 [^\t\n\r\f\v]
  15. \w : 任何字母数字,等价于 [a-zA-Z0-9_]
  16. \W : 任何非字母数字,等价于 [^a-zA-Z0-9_]
  17. '*':匹配零次或多次出现
  18. '+':匹配一个或多个匹配项
  19. '?': 匹配零次或一次
  20. {n}:正好 n 次重复,n>=0
  21. {n,}:至少 n 次重复
  22. {,n}:最多 n 次重复
  23. {m,n}:至少 m 次重复,最多 n 次重复

了解解决方法的示例

现在您已经了解了组成 RegEx 的字符,让我们看看它是如何工作的:

1. 邮件过滤:

假设您想从一个长段落中过滤掉所有的电子邮件 ID。 电子邮件的一般格式是:

用户名@domain_name。 <top_level_domain>

用户名可以是字母数字,因此,我们可以使用 \w 来表示它们,但用户可能会创建一个名为 firstName.surname 的帐户。 为了解决这个问题,我们将转义点并创建一组字符。 接下来,domain_name 应该只是字母,因此,A-Za-z 将表示它。 顶级域通常是 .com、.in、.org,但根据用例,您可以选择整个字母范围或过滤特定域。

它的正则表达式如下所示:

^([a-zA-Z0-9_.]+)@([a-zA-Z0-9-]+)\.([a-zA-Z]{2,4})$

这里还声明了模式的开始和结束,顶级域只能包含 2-4 个字符。 整个表达式有3组。

2.日期过滤:

您提取的文本信息可能包含日期,并且没有为您提供单独的列。 日期是有助于过滤数据或时间序列分析的重要因素。 特定日期采用日期/月/年的格式,其中日期和月份可以互换。

此外,月份可以是数字形式,也可以是字母形式,字母形式可以是缩写词或全名。 这主要取决于我们的数据中有多少案例,只能通过hit and trial来实现。

一个涵盖各种日期的简单正则表达式如下所示:

^(\d{1,2})[/-](\d{1,2})[/-](\d{2,4})$

此模式使用连字符或正斜杠捕获日期格式。 日期和月份限于一位或两位数,年份最多为 40 位。 在这种情况下,各个实体被捕获为可选的组。

另请阅读: Python 项目理念和主题

如何在 Python 中实现它?

我们刚刚构建的正则表达式满足了我们假设的相应标准,现在是时候在 Python 代码中实现它们了。 Python 有一个名为 re 的内置模块,它实现了这些表达式的工作。 简单地,

重新进口

模式 = '^(\d{1,2})[/-](\d{1,2})[/-](\d{2,4})$'

Re 模块提供了广泛的功能,它们都有不同的用例。 让我们看一些重要的功能:

  1. re.findall():此函数根据传递的模式返回测试字符串中所有匹配项的列表。 考虑这个例子:

string = '25-12-1999 随机文本 25/12/1999'

打印(re.findall(模式,字符串))

它将仅返回列表中字符串中的日期。

  1. re.sub():这个函数中的 Sub 代表替换,做同样的事情。 它用提供的替换值替换匹配项。 该函数接受计数的模式、字符串、替换值和可选参数。 count 参数控制要替换的出现次数。 默认情况下,它会替换所有这些并返回新字符串。
  2. re.split():它在匹配的位置拆分字符串,并将部分作为单独的字符串返回列表中。
  3. re.search():此函数返回包含在字符串中找到的匹配项以及它捕获的所有组的匹配对象。 当您想将这些组存储为单独的列时,它可以派上用场。

要执行此操作:

匹配 = re.search(模式,字符串)

匹配组(1)

Group(0) 返回整个匹配项,对应的下一个数字表示其他组。

结帐:印度的 Python 开发人员薪水

结论

正则表达式是捕获文本数据中模式的强大方法。 掌握各种字符的命令可能需要一些额外的努力,但它简化了复杂用例中数据提取的过程。

举一些 Python 中正则表达式的例子。

以下示例说明了 Python 中的功能或正则表达式:
一种。 电子邮件过滤
正则表达式可以有效地用于过滤电子邮件。 电子邮件过滤的常规语法是 - ^((a-zA-Z0-9_.)+)@((a-zA-Z0-9-)+).((a-zA-Z){2,4} )$
此表达式分为三组并处理许多情况,包括 - 当用户名是字母数字时以及当它有一个点时,例如,“first.last@”。 此表达式将用于包含 2-4 个字符的顶级域。
湾。 日期过滤
在处理数据过滤时,日期可能是一个关键因素。 您处理的文本数据通常包含日期。 从普通文本中提取数据的正则表达式或 RegEx 是 - ^(d{1,2})(/-)(d{1,2})(/-)(d{2,4})$
日期和月份最多可以是 2 位数字,而月份最多可以是 4 位数字。

Python中正则表达式的实现涉及到哪些函数?

Python中正则表达式的实现涉及以下函数:
1. re.findall() - 此函数接受要与文本字符串匹配的模式。 它返回匹配的字符串。
2. re.sub() - “re.sub”中的Sub代表“替换”。 此方法执行与“re.findall()”函数完全相同的功能。
3. re.split() - 分隔分隔符周围的字符串,作为参数传递给它。 分隔符可以是任何东西。
4. re.search() - 此函数返回在字符串中找到的匹配项以及它捕获的其他字符串组。

正则表达式中使用了哪些特殊序列?

以下是正则表达式中使用的一些特殊序列:
1. A:检查字符串是否以给定字符开头。
2.(正斜杠)b:检查字符串是否以给定字符开头或结尾。 (string)/b 检查开头,而 (反斜杠) b (string) 检查结尾。
3. B:与b完全相反。 检查字符串是否不以给定字符开头。
4. d:检查字符串中的数值。
5. D:检查任何非数值或字符。
6. s:检查任何空白字符。
7. S:检查任何非空白字符。
8. w:检查任何字母数字字符。
9. W:检查任何非字母数字字符。