首页 后端开发 Python教程 python 正则表达式学习小结

python 正则表达式学习小结

Jan 12, 2017 pm 04:28 PM
python 正则表达式

  在Python中实现正则的方式是通过re(regular expression的缩写)模块来实现的,你可以调用re模块的各种方法来实现不同的功能,下面我们就来说下,在Python中通过re模块可以调用那些方法,以及这些方法的作用都是什么;还有就是正则的实例以及各种特殊符号的含义:

  1、re.sub和replace:

    sub的全拼是substitute,也就是替换的意思;既然知道是替换了,那就很容易用到实例中了,其实replace也是替换的意思,只不过它们的用法不太相同,下面用一个例子来详细说明下它们的异同之处:

>>> import re
>>> str1 = 'Hello 111 is 222'
>>> str2 = str1.replace('111','222')
>>> print(str2)
Hello 222 is 222
>>>
登录后复制

   这是一个简单的例子,如果是下面这种情形,把所有的数字都换成222,那么用replace实现起来就比较麻烦,而用re模块的sub方法实现起来就比较的简单:(如果是更复杂的操作,使用replace可能就无法实现了。)

>>> import re
>>> str1 = 'Hello 123 is 456'
>>> str2 = re.sub('\d+','222',str1)
>>> print(str2)
Hello 222 is 222
>>>
登录后复制

  2、re.search()和re.match():

    match: 只从字符串的开始与正则表达式匹配,匹配成功返回matchobject,否则返回none.

    search:将字符串的所有字串尝试与正则表达式匹配,如果所有的字串都没有匹配成功则返回none,否则返回matchobject.

    下面这个例子说明了match和search的异同点,也说明了,在实际的应用中,search用的还是比较多的:

import re
str = 'helloword,i am alex'
if not re.match('word',str):
print('cannot match')
print(re.match('hello',str1).group())
print(re.search('word',str1).group())
#显示结果
cannot match
hello
word
登录后复制


  3、re.split:

    在Python中,如果想对一个字符串进行分割的话,只需要调用str的split方法就可以实现,但是这个split只能根据某个字符来进行分割的操作,如果要同时指定多个字符来进行分割的话,它就无法实现了。

    好在re模块也提供了split这个方法来对字符串进行分割,而且这个方法更加强大,可以同时根据多个字符进行分割的操作,下面来看分别看一下str的split和re的split有什么不同的地方:

str1 = 'helloword,i;am\nalex'
str2 = str1.split(',')
print(str2)
import re
str3 = re.split('[,|;|\n]',str1)
print(str3)
#下面是不同的输出结果
['helloword', 'i;am\nalex']
['helloword', 'i', 'am', 'alex']
登录后复制


    从中我们可以看出,上面说的真实性。

  4、findall:

    findall方法基本上都是和compile方法同时出现的,它们的用法是:

      先由compile将一个正则表达式的字符串形式转换成pattern实例,然后再使用patte实例调用findall方法生成match对象来获取结果,在将它们结合的实例之前,我们先来看下正则表达式中预设的特殊字符含义:

    \d 匹配任何十进制数;它相当于类 [0-9]。

    \D 匹配任何非数字字符;它相当于类 [^0-9]。

    \s 匹配任何空白字符;它相当于类 [ "t"n"r"f"v]。

    \S 匹配任何非空白字符;它相当于类 [^ "t"n"r"f"v]。

    \w 匹配任何字母数字字符;它相当于类 [a-zA-Z0-9_]。

    \W 匹配任何非字母数字字符;它相当于类 [^a-zA-Z0-9_]。

   看完这几个特殊字符的含义,我们再举一个例子来说明一下上面的论点:

import re
str1 = 'asdf12dvdve4gb4'
pattern1 = re.compile('\d')
pattern2 = re.compile('[0-9]')
mch1 = pattern1.findall(str1)
mch2 = pattern2.findall(str1)
print('mch1:\t%s'% mch1)
print('mch2:\t%s'% mch2)
#输出结果
mch1: ['1', '2', '4', '4']13 mch2: ['1', '2', '4', '4']
登录后复制


   上面的两个实例都可以很好的阐述上面的论点,而且也表明了,特殊字符\d确实跟[0-9]是一样的,通过输出结果就可以看出,那么如果你不想把每个数字都拆分为一个元素放在列表中,而是想把12整体的输出出来,那么你可以这样做:(就是在\d的后面加上个+号来实现的,这里的+号表示的是把一个或者多个相连的十进制数字整体输出)

import re
str1 = 'asdf12dvdve4gb4'
pattern1 = re.compile('\d+')
pattern2 = re.compile('[0-9]')
mch1 = pattern1.findall(str1)
mch2 = pattern2.findall(str1)
print('mch1:\t%s'% mch1)
print('mch2:\t%s'% mch2)
#输出结果
mch1: ['12', '4', '4']
mch2: ['1', '2', '4', '4']
登录后复制


   我们再举一个小例子,这个例子是结合特殊字符和re的sub功能实现一下把字符串中所有的空格都给去掉:

import re
str1 = 'asd \tf12d vdve4gb4'
new_str = re.sub('\s*','',str)
print(new_str)
#输出结果
asdf12dvdve4gb4
登录后复制


  5、元字符:

    我们通常所说的二元字符有;2元字符:. ^ $ * + ? { } [ ] | ( ) \

    我们首先考察的元字符是"[" 和 "]"。它们常用来指定一个字符类别,所谓字符类别就是你想匹配的一个字符集。字符可以单个列出,也可以用“-”号分隔的两个给定
字符来表示一个字符区间。例如,[abc] 将匹配"a", "b", 或 "c"中的任意一个字符;也可以用区间[a-c]来表示同一字符集,和前者效果一致。如果你只想匹配小写字母,那么 RE 应写成 [a-z].元字符在类别里并不起作用。例如,[akm$]将匹配字符"a", "k", "m", 或 "$" 中的任意一个;"$"通常用作元字符,但在字符类别里,其特性被除去,恢复成普通字
符。

    []:元字符[]表示字符类,在一个字符类中,只有字符^、-、]和\有特殊含义。字符\仍然表示转义,字符-可以定义字符范围,字符^放在前面,表示非.(这个在上面的特殊字符示例中也有提现),

    + 匹配+号前内容1次至无限次
    ? 匹配?号前内容0次到1次
    {m} 匹配前面的内容m次
    {m,n} 匹配前面的内容m到n次

    下面通过一个小例子,来阐述一下上面的字符在元字符[]中的使用:(在下面的这个例子中,要注意的有两点:一是在\d+后面的?号的含义,二是在匹配的前面加上了一个字符r,其实在这个示例中,加与不加都可以显示一样的结果)

>>> import re
>>> print(re.findall(r"a(\d+?)","a123b"))
['1']
>>> print(re.findall(r"a(\d+)","a123b"))
['123']
>>>
登录后复制


以上所述是小编给大家介绍的python 正则表达式学习小结,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对PHP中文网的支持!

更多python 正则表达式学习小结相关文章请关注PHP中文网!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
2 周前 By 尊渡假赌尊渡假赌尊渡假赌
仓库:如何复兴队友
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
4 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

如何使用Python查找文本文件的ZIPF分布 如何使用Python查找文本文件的ZIPF分布 Mar 05, 2025 am 09:58 AM

本教程演示如何使用Python处理Zipf定律这一统计概念,并展示Python在处理该定律时读取和排序大型文本文件的效率。 您可能想知道Zipf分布这个术语是什么意思。要理解这个术语,我们首先需要定义Zipf定律。别担心,我会尽量简化说明。 Zipf定律 Zipf定律简单来说就是:在一个大型自然语言语料库中,最频繁出现的词的出现频率大约是第二频繁词的两倍,是第三频繁词的三倍,是第四频繁词的四倍,以此类推。 让我们来看一个例子。如果您查看美国英语的Brown语料库,您会注意到最频繁出现的词是“th

我如何使用美丽的汤来解析HTML? 我如何使用美丽的汤来解析HTML? Mar 10, 2025 pm 06:54 PM

本文解释了如何使用美丽的汤库来解析html。 它详细介绍了常见方法,例如find(),find_all(),select()和get_text(),以用于数据提取,处理不同的HTML结构和错误以及替代方案(SEL)

python中的图像过滤 python中的图像过滤 Mar 03, 2025 am 09:44 AM

处理嘈杂的图像是一个常见的问题,尤其是手机或低分辨率摄像头照片。 本教程使用OpenCV探索Python中的图像过滤技术来解决此问题。 图像过滤:功能强大的工具 图像过滤器

如何使用Python使用PDF文档 如何使用Python使用PDF文档 Mar 02, 2025 am 09:54 AM

PDF 文件因其跨平台兼容性而广受欢迎,内容和布局在不同操作系统、阅读设备和软件上保持一致。然而,与 Python 处理纯文本文件不同,PDF 文件是二进制文件,结构更复杂,包含字体、颜色和图像等元素。 幸运的是,借助 Python 的外部模块,处理 PDF 文件并非难事。本文将使用 PyPDF2 模块演示如何打开 PDF 文件、打印页面和提取文本。关于 PDF 文件的创建和编辑,请参考我的另一篇教程。 准备工作 核心在于使用外部模块 PyPDF2。首先,使用 pip 安装它: pip 是 P

如何在django应用程序中使用redis缓存 如何在django应用程序中使用redis缓存 Mar 02, 2025 am 10:10 AM

本教程演示了如何利用Redis缓存以提高Python应用程序的性能,特别是在Django框架内。 我们将介绍REDIS安装,Django配置和性能比较,以突出显示BENE

如何使用TensorFlow或Pytorch进行深度学习? 如何使用TensorFlow或Pytorch进行深度学习? Mar 10, 2025 pm 06:52 PM

本文比较了Tensorflow和Pytorch的深度学习。 它详细介绍了所涉及的步骤:数据准备,模型构建,培训,评估和部署。 框架之间的关键差异,特别是关于计算刻度的

如何在Python中实现自己的数据结构 如何在Python中实现自己的数据结构 Mar 03, 2025 am 09:28 AM

本教程演示了在Python 3中创建自定义管道数据结构,利用类和操作员超载以增强功能。 管道的灵活性在于它能够将一系列函数应用于数据集的能力,GE

Python中的平行和并发编程简介 Python中的平行和并发编程简介 Mar 03, 2025 am 10:32 AM

Python是数据科学和处理的最爱,为高性能计算提供了丰富的生态系统。但是,Python中的并行编程提出了独特的挑战。本教程探讨了这些挑战,重点是全球解释

See all articles