Python高级正则表达式

介绍

 

使用 Python 通往成功的阶梯

在我们教程的正则表达式介绍中,我们已经介绍了正则表达式的基本原理。我们已经展示了最简单的正则表达式的样子。我们还学习了如何通过使用 re 模块的 search() 和 match() 方法在 Python 中使用正则表达式。制定和使用字符类的概念,以及预定义的字符类,如 \d、\D、\s、\S 等,现在应该是众所周知的。您一定已经学会了如何使用正则表达式匹配字符串的开头和结尾。您必须知道问号的特殊含义才能使项目可选。我们还引入了量词来任意或在特定范围内重复字符和组。

您还必须熟悉分组的使用以及反向引用的语法和用法。

此外,我们已经解释了 re 模块的匹配对象及其包含的信息,以及如何使用 span()、start()、end() 和 group() 方法检索这些信息。

介绍以一个全面的 Python 示例结束。

在本章中,我们将继续解释正则表达式的语法。我们还将解释 Python 模块 re 的更多方法。例如,如何查找正则表达式的所有匹配子字符串。一项需要使用其他编程语言(如 Perl 或 Java)编程的任务,但可以通过调用 Python 的 re 模块的一个方法来处理。到目前为止,我们只知道如何使用字符类定义字符选择。我们将在教程的本章中演示如何制定子串的交替,

查找所有匹配的子串

Python 模块 re 提供了另一种很棒的方法,这是 Perl 和 Java 等其他语言不提供的。如果要查找字符串中与正则表达式匹配的所有子字符串,则必须在 Perl 和其他语言中使用循环,如下面的 Perl 片段所示:

而 ($string =~ m/regex/g) {
  打印“找到 '$&'。下一次尝试字符”。pos($string)+1 。"\n";
}

在 Python 中要容易得多。无需循环。我们可以使用 re 模块的 findall 方法:

 re.findall(模式,字符串[,标志]) 

findall 返回字符串中模式的所有非重叠匹配项,作为字符串列表。从左到右扫描字符串,并按照找到的顺序返回匹配项。

t = "肥猫不吃燕麦,但老鼠吃蝙蝠。" = 重新findall ( "[force]at" ,  t )
打印( mo )

输出:

['脂肪', '猫', '吃', '燕麦', '老鼠', '吃']

如果模式中存在一个或多个组, findall 将返回一个组列表。如果模式有多个组,这将是一个元组列表。我们将在下一个示例中演示这一点。我们有一个很长的字符串,其中包含各种 Python 培训课程及其日期。第一次调用 findall 时,我们不使用任何分组并因此接收完整的字符串。在下一次调用中,我们使用分组并 findall 返回一个 2 元组列表,每个元组将课程名称作为第一个组成部分,将日期作为第二个组成部分:

进口 重新
课程 =  “Python的训练课程初学者:15/8/2011 - 19/8/2011; Python的培训课程中间体:12 / DEC / 2011 - 16 / DEC / 2011; Python的文本处理场:31月/ 10月/ 2011 - 4/Nov/2011" 
items  =  re findall ( "[^:]*:[^;]*;?" , 课程)
项目

输出:

['Python 初学者培训课程:15/Aug/2011 - 19/Aug/2011;',
 'Python 培训课程中级:12/Dec/2011 - 16/Dec/2011;',
 'Python 文本处理课程:31/Oct/2011 - 4/Nov/2011']
项目 = 重新findall ( "([^:]*):([^;]*;?)" , 课程)
项目

输出:

[('Python 初学者培训课程', '15/Aug/2011 - 19/Aug/2011;'),
 (“Python 培训课程中级”,“2011 年 12 月 12 日 - 2011 年 12 月 16 日;”),
 (“Python 文本处理课程”,“2011 年 10 月 31 日 - 2011 年 11 月 4 日”)]

交替

在我们对正则表达式的介绍中,我们介绍了字符类。字符类提供一组字符中的一个选择。有时我们需要在几个正则表达式之间进行选择。这是一个逻辑“或”,这就是为什么这个结构的符号是“|” 象征。在以下示例中,我们检查伦敦、巴黎、苏黎世、康斯坦茨伯尔尼或斯特拉斯堡中的一个城市是否出现在以“location”一词开头的字符串中:

import  re 
str  =  
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值