热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

python表示二元一次表达式_python模块之re正则表达式详解

一、简单介绍正则表达式是一种小型的、高度专业化的编程语言,并不是python中特有的,是许多编程语言中基础而又重要的一部分。在python中࿰

一、简单介绍

正则表达式是一种小型的、高度专业化的编程语言,并不是python中特有的,是许多编程语言中基础而又重要的一部分。在python中,主要通过re模块来实现。

正则表达式模式被编译成一系列的字节码,然后由用c编写的匹配引擎执行。那么正则表达式通常有哪些使用场景呢?

比如为想要匹配的相应字符串集指定规则;

该字符串集可以是包含e-mail地址、Internet地址、电话号码,或是根据需求自定义的一些字符串集;

当然也可以去判断一个字符串集是否符合我们定义的匹配规则;

找到字符串中匹配该规则的部分内容;

修改、切割等一系列的文本处理;

......

二、特殊符号和字符(元字符)

这里介绍常见的一些元字符,它给予正则表达式强大的功能和灵活性。表2-1列出了比较常见的符号和字符。

三、正则表达式

1、使用 compile()函数编译正则表达式

由于python代码最终会被翻译成字节码,然后在解释器上执行。所以对于我们代码中经常要用到的一些正则表达式进行预编译,执行起来会更加便捷。

re模块中的大多数函数和已经编译的正则表达式对象和正则匹配对象的方法同名并且具有相同的功能。

示例:

>>> import re

>>> r1 = r'bugs' # 字符串前加"r"反斜杠就不会被任何特殊方式处理,这是个习惯,虽然这里没用到

>>> re.findall(r1, 'bugsbunny') # 直接利用re模块进行解释性地匹配

['bugs']

>>>

>>> r2 = re.compile(r1) # 如果r1这个匹配规则你会经常用到,为了提高效率,那就进行预编译吧

>>> r2 # 编译后的正则对象

>>>

>>> r2.findall('bugsbunny') # 访问对象的findall方法得到的匹配结果与上面是一致的

['bugs'] # 所以说,re模块中的大多数函数和已经编译的正则表达式对象和正则匹配对象的方法同名并且具有相同的功能

re.compile()函数也接受可选的标志参数,常用来实现不同的特殊功能和语法变更。这些标志也可以作为参数适用于大多数re模块函数。这些标志可以用操作法(|)合并。

示例:

>>> import re

>>> r1 = r'bugs'

>>> r2 = re.compile(r1,re.I) # 这里选择的是忽略大小写的标志,完整的是re.IGNORECASE,这里简写re.I

>>> r2.findall('BugsBunny')

['Bugs']
# re.S 使.匹配换行符在内的所有字符
# re.M 多行匹配,英雄^和$
# re,X 用来使正则匹配模式组织得更加清晰

完整的标志参数列表和用法可以参考相关官方文档。

2、使用正则表达式

re模块提供了一个正则表达式引擎的接口,下面具体介绍一些常用的函数和方法。

匹配对象以及group()和groups()方法

当处理正则表达式时,除了正则表达式对象之外,还有一个对象类型:匹配对象。这些是成功调用 match()或者search()返回的对象。匹配对象有两个主要的方法:group()和groups()。

group()要么返回整个匹配对象,要么根据要求返回特定子组。groups()则仅返回一个包含唯一或者全部子组的元组。如果没有子组的要求,那么当group()仍然返回整个匹配时,groups返回一个空元组。下面一些函数示例会演示到此方法。

使用 match()方法匹配字符串

match()函数从字符串的起始部分对模式进行匹配。如果匹配成功,就返回一个匹配对象;如果匹配失败,就返回 None,匹配对象的方法 group()方法就能够用于显示那个成功的匹配。

示例如下:

>>> m = re.match('bugs', 'bugsbunny') # 模式匹配字符串

>>> if m is not None: # 如果匹配成功,就输出匹配内容

... m.group()

...

'bugs'
>>> m<_sre.sre_match object at> # 确认返回的匹配对象

使用search()在一个字符串中查找模式

search()的工作方式与match()完全一致&#xff0c;不同之处在于search()是对给定正则表达式模式搜索第一次出现的匹配情况。简单来说&#xff0c;就是在任意位置符合都能匹配成功&#xff0c;不仅仅是字符串的起始部分&#xff0c;这就是与match()函数的区别&#xff0c;用脚指头想想search()方法使用的范围更多更广。

示例&#xff1a;

>>> m &#61; re.search(&#39;bugs&#39;, &#39;hello bugsbunny&#39;)

>>> if m is not None:

... m.group()

...

&#39;bugs&#39;

使用findall()和finditer()查找每一次出现的位置

findall()是用来查找字符串中所有(非重复)出现的正则表达式模式&#xff0c;并返回一个匹配列表&#xff1b;finditer()与findall()不同的地方是返回一个迭代器&#xff0c;对于每一次匹配&#xff0c;迭代器都返回一个匹配对象。

>>> m &#61; re.findall(&#39;bugs&#39;, &#39;bugsbunnybugs&#39;)

>>> m

[&#39;bugs&#39;, &#39;bugs&#39;]

>>> m &#61; re.finditer(&#39;bugs&#39;, &#39;bugsbunnybugs&#39;)

>>> m.next() # 迭代器用next()方法返回一个匹配对象

<_sre.sre_match object at> # 匹配用group()方法显示出来

>>> m.next().group()

&#39;bugs&#39;

使用sub()和subn()搜索与替换

都是将某字符串中所有匹配正则表达式的部分进行某种形式的替换。sub()返回一个用来替换的字符串&#xff0c;可以定义替换次数&#xff0c;默认替换所有出现的位置。subn()和sub()一样&#xff0c;但subn()还返回一个表示替换的总是&#xff0c;替换后的字符串和表示替换总数一起作为一个拥有两个元素的元组返回。

示例&#xff1a;

>>> r &#61; &#39;a.b&#39;

>>> m &#61; &#39;acb abc aab aac&#39;

>>> re.sub(r,&#39;hello&#39;,m)

&#39;hello abc hello aac&#39;
>>> re.subn(r,&#39;hello&#39;,m)
(&#39;hello abc hello aac&#39;, 2)

字符串也有一个replace()方法&#xff0c;当遇到一些模糊搜索替换的时候&#xff0c;就需要更为灵活的sub()方法了。

使用split()分割字符串

同样的&#xff0c;字符串中也有split()&#xff0c;但它也不能处理正则表达式匹配的分割。在re模块中&#xff0c;分居正则表达式的模式分隔符&#xff0c;split函数将字符串分割为列表&#xff0c;然后返回成功匹配的列表。

示例&#xff1a;

>>> s &#61; &#39;1&#43;2-3*4&#39;

>>> re.split(r&#39;[\&#43;\-\*]&#39;,s)

[&#39;1&#39;, &#39;2&#39;, &#39;3&#39;, &#39;4&#39;]

分组

有时在匹配的时候我们只想提取一些想要的信息或者对提取的信息作一个分类&#xff0c;这时就需要对正则匹配模式进行分组&#xff0c;只需要加上()即可。

示例&#xff1a;

>>> m &#61; re.match(&#39;(\w{3})-(\d{3})&#39;,&#39;abc-123&#39;)

>>> m.group() # 完整匹配

&#39;abc-123&#39;

>>> m.group(1) # 子组1

&#39;abc&#39;

>>> m.group(2) # 子组2

&#39;123&#39;

>>> m.groups() # 全部子组

(&#39;abc&#39;, &#39;123&#39;)

由以上的例子可以看出&#xff0c;group()通常用于以普通方式显示所有的匹配部分&#xff0c;但也能用于获取各个匹配的子组。可以使用groups()方法来获取一个包含所有匹配字符串的元组。

以上所述是小编给大家介绍的python模块之re正则表达式详解&#xff0c;希望对大家有所帮助&#xff0c;如果大家有任何疑问请给我留言&#xff0c;小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持&#xff01;



推荐阅读
  • Python爬虫中使用正则表达式的方法和注意事项
    本文介绍了在Python爬虫中使用正则表达式的方法和注意事项。首先解释了爬虫的四个主要步骤,并强调了正则表达式在数据处理中的重要性。然后详细介绍了正则表达式的概念和用法,包括检索、替换和过滤文本的功能。同时提到了re模块是Python内置的用于处理正则表达式的模块,并给出了使用正则表达式时需要注意的特殊字符转义和原始字符串的用法。通过本文的学习,读者可以掌握在Python爬虫中使用正则表达式的技巧和方法。 ... [详细]
  • 本文介绍了在处理不规则数据时如何使用Python自动提取文本中的时间日期,包括使用dateutil.parser模块统一日期字符串格式和使用datefinder模块提取日期。同时,还介绍了一段使用正则表达式的代码,可以支持中文日期和一些特殊的时间识别,例如'2012年12月12日'、'3小时前'、'在2012/12/13哈哈'等。 ... [详细]
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • Python正则表达式学习记录及常用方法
    本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
  • 本文由编程笔记#小编为大家整理,主要介绍了logistic回归(线性和非线性)相关的知识,包括线性logistic回归的代码和数据集的分布情况。希望对你有一定的参考价值。 ... [详细]
  • 如何实现织梦DedeCms全站伪静态
    本文介绍了如何通过修改织梦DedeCms源代码来实现全站伪静态,以提高管理和SEO效果。全站伪静态可以避免重复URL的问题,同时通过使用mod_rewrite伪静态模块和.htaccess正则表达式,可以更好地适应搜索引擎的需求。文章还提到了一些相关的技术和工具,如Ubuntu、qt编程、tomcat端口、爬虫、php request根目录等。 ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • Excel数据处理中的七个查询匹配函数详解
    本文介绍了Excel数据处理中的七个查询匹配函数,以vlookup函数为例进行了详细讲解。通过示例和语法解释,说明了vlookup函数的用法和参数的含义,帮助读者更好地理解和运用查询匹配函数进行数据处理。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • 开发笔记:Docker 上安装启动 MySQL
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了Docker上安装启动MySQL相关的知识,希望对你有一定的参考价值。 ... [详细]
  • IOS开发之短信发送与拨打电话的方法详解
    本文详细介绍了在IOS开发中实现短信发送和拨打电话的两种方式,一种是使用系统底层发送,虽然无法自定义短信内容和返回原应用,但是简单方便;另一种是使用第三方框架发送,需要导入MessageUI头文件,并遵守MFMessageComposeViewControllerDelegate协议,可以实现自定义短信内容和返回原应用的功能。 ... [详细]
  • 本文介绍了绕过WAF的XSS检测机制的方法,包括确定payload结构、测试和混淆。同时提出了一种构建XSS payload的方法,该payload与安全机制使用的正则表达式不匹配。通过清理用户输入、转义输出、使用文档对象模型(DOM)接收器和源、实施适当的跨域资源共享(CORS)策略和其他安全策略,可以有效阻止XSS漏洞。但是,WAF或自定义过滤器仍然被广泛使用来增加安全性。本文的方法可以绕过这种安全机制,构建与正则表达式不匹配的XSS payload。 ... [详细]
  • 背景应用安全领域,各类攻击长久以来都危害着互联网上的应用,在web应用安全风险中,各类注入、跨站等攻击仍然占据着较前的位置。WAF(Web应用防火墙)正是为防御和阻断这类攻击而存在 ... [详细]
author-avatar
哎呦我去2502859031
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有