Python语法学习之正则表达式的量词汇总

目录
  • 正则表达式中的符号
    • 示例 - 1
    • 示例 - 2
    • 示例 - 3
    • 示例 - 4
    • 示例 - 5
    • 示例 - 6
    • 示例 - 7
    • 示例 - 8
  • 组的概念
  • 贪婪模式与非贪婪模式

正则表达式中的符号

符号 描述
re1 | re2 匹配正则表达式 re1 或者 re2 ;re1 与 re2 代表两个匹配的字符串信息
^ 匹配字符串起始部分
$ 匹配字符串终止部分(也就是末尾部分)
* 匹配0次或者多次前面出现的正则表达式
+ 匹配1次或者多次前面出现的正则表达式
{N} 匹配 N 次前面出现的正则表达式
{M, N} 匹配 M - N 次前面出现的正则表达式
[…] 匹配来自字符集的任意单一字符
[…x-y…] 匹配 x-y 范围内的任意单一字符
[^…] 不匹配此字符集内出现的任何一个字符,包括某一范围的字符(如果在此字符集中出现)
\ 将特殊字符无效化

通过这样的描述可能大家很难理解,接下来我们看一些简单的例子,帮助理解它们的用法。(下文示例顺序按照上述表格顺序排列)

示例 - 1

代码示例如下:

import re

test_data = 'Neo@protonmail.com'

print(re.findall('Neo|proton|com|mail', test_data))

# >>> 执行结果如下:
# >>> ['Neo', 'proton', 'mail', 'com']

PS:| 为 或 的关系,只要存在就能捕获;匹配到的顺序只按照字符串的顺序返回,而不是按照匹配规则返回。

示例 - 2

代码示例如下:

import re

test_data = 'Neo@protonmail.com'

print(re.findall('^Neo', test_data))

# >>> 执行结果如下:
# >>> ['Neo']

print(re.findall('^HanMeiMei', test_data))		# 没有开头是 HanMeiMei 的数据
# >>> 执行结果如下:
# >>> []

PS:^ 匹配字符串起始部分; 等同于上一章节我们学习的 \A

示例 - 3

代码示例如下:

import re

test_data = 'Neo@protonmail.com'

print(re.findall('com$', test_data))

# >>> 执行结果如下:
# >>> ['com']

print(re.findall('com.cn$', test_data))		# 没有结尾是 com.cn 的数据

# >>> 执行结果如下:
# >>> []

PS:$ 匹配字符串末尾部分; 等同于上一章节我们学习的 \Z

示例 - 4

代码示例如下:

import re

test_data = 'Neo@protonmail.com'

print(re.findall('\w*', test_data))     # 匹配 0 次 或者 多次 数字或字母,[含空格]((解决上一章节的思考问题

# >>> 执行结果如下:
# >>> ['Neo', '', 'protonmail', '', 'com', '']

PS:匹配 0 次 或者 多次 数字或字母,[含空格]((解决上一章节的思考问题)

示例 - 5

代码示例如下:

import re

test_data = 'Neo@protonmail.com'

print(re.findall('\w+', test_data))     # 匹配 1 次 或者 多次 数字或字母,[不含空格]

# >>> 执行结果如下:
# >>> ['Neo', 'protonmail', 'com']
  • w+ : 匹配1次或者多次数字或者字母
  • @ 和 . :属于 0 次 范围,不会被匹配出来

示例 - 6

代码示例如下:

import re

test_data = 'Neo@protonmail.com'

print(re.findall('\w{3}', test_data))		# 匹配3次数字或者字母

# >>> 执行结果如下:
# >>> ['Neo', 'pro', 'ton', 'mai', 'com']

print(re.findall('[a-z]{3}', test_data))	# 匹配小写的 [a-z] 3次

# >>> 执行结果如下:
# >>> ['pro', 'ton', 'mai', 'com']
  • {N}:对于匹配到的数据只获取 N 个
  • [a-zA-Z0-9]:基本上等同于 \w

示例 - 7

代码示例如下:

import re

test_data = 'Neo@protonmail.com'

print(re.findall('\w{1,5}', test_data))    # 匹配 1 次 到 5次 的数字或字母[这是一个范围]

# >>> 执行结果如下:
# >>> ['Neo', 'proto', 'nmail', 'com']

print(re.findall('\w{1, 5}', test_data)) 

# >>> 执行结果如下:
# >>> []
  • [1,5]:给出匹配到的数据的范围
  • [1, 5]:需要注意的是 N 和 M 中间的逗号不能有空格,否则会返回的是空列表。

示例 - 8

代码示例如下:

import re

test_data = 'Neo@protonmail.com'

print(re.findall('[^Neo]', test_data))      # 这里的 ^ 不再代表开始的位置,而是不匹配 Neo 此字符集

# >>> 执行结果如下:
# >>> ['@', 'p', 'r', 't', 'n', 'm', 'a', 'i', 'l', '.', 'c', 'm']

PS:[^...] 这里中括号内的 ^ 不再代表开始的位置,而是过滤掉当前字符集中的字符。

组的概念

符号 描述
() 在匹配规则中获取指定的数据

代码示例如下:

import re

data = "My name is Neo, I'm 30 year's old."
result = re.search('My name is (.*), I\'m (.*) year\'s old.', data)   # search 函数是一个获取组的概念

print(result.groups())	

# >>> 执行结果如下:
# >>> ('Neo', '30')

print(result.group(1))	# 获取 组 的第一个数据
# >>> 执行结果如下:
# >>> Neo

print(result.group(2))	# 获取 组 的第二个数据

# >>> 执行结果如下:
# >>> 30

利用 search 函数组的概念,获取指定字符串中指定的数据。

贪婪模式与非贪婪模式

在上文的例子中,我们使用的 '.*' 或者 '\w+' 等的这种匹配0次或者多次就是属于 贪婪模式

而非贪婪模式,就是可以匹配到多个信息,但是进行了限制,就是非贪婪模式。实现非贪婪模式,通过? 组合编程非贪婪模式。

\d+? 或者 \w*? 等模式

以上就是Python语法学习之正则表达式的量词汇总的详细内容,更多关于Python正则表达式量词的资料请关注我们其它相关文章!

(0)

相关推荐

  • Python 正则表达式大全(推荐)

    目录 1 前言 2 基本语法 2.1 match函数 2.2 search 函数 2.3 sub 函数 3 特殊类语法 3.1 字符类 3.2 特殊字符类 3.3 重复匹配 3.4 非贪婪重复 3.5 圆括号分组 3.6 反向引用 3.7 锚点 3.8 带括号的特殊语法 1 前言 正则表达式是对字符串(包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为"元字符"))操作的一种逻辑公式,就是用事先定义好的一些特定字符.及这些特定字符的组合,组成一个"规则字符串&quo

  • Python正则表达式总结分享

    注意:本文基于Python2.4完成:如果看到不明白的词汇请记得百度谷歌或维基,whatever. 1. 正则表达式基础 1.1. 简单介绍 正则表达式并不是Python的一部分.正则表达式是用于处理字符串的强大工具,拥有自己独特的语法以及一个独立的处理引擎,效率上可能不如str自带的方法,但功能十分强大.得益于这一点,在提供了正则表达式的语言里,正则表达式的语法都是一样的,区别只在于不同的编程语言实现支持的语法数量不同:但不用担心,不被支持的语法通常是不常用的部分.如果已经在其他语言里使用过正

  • Python正则表达式的小练习分享

    目录 匹配网址 url 的小练习 匹配邮箱地址的小练习 获取前端代码内容的练习 匹配网址 url 的小练习 定义一个函数,判断 url 是否是一个正常的地址. 定义一个函数,只获取 url 的域名部分 import re url_ture = "https://www.csdn.net/" url_false = "ftp://110.110.110.110:8080" def check_url(url): result = re.findall('[a-zA-z

  • Python语法学习之正则表达式的使用详解

    目录 正则表达式中的特殊字符 正则表达式的使用 正则小案例 - 1 正则小案例 - 2 正则小案例 - 3 要想成功的进行字符串的匹配需要使用到正则表达式模块,正则表达式匹配规则以及需要被匹配的字符串.在这三个条件中,模块与字符串都是准备好的,只有匹配规则异常的灵活,而今天这个章节就是认识一下正则表达式中的特殊字符,通过这些字符就可以针对我们想要的数据进行匹配. 正则表达式中的特殊字符 特殊字符 描述 \d 匹配任何十进制的数字,与[0-9]一致 \D 匹配任意非数字 \w 匹配任何字母数字下划

  • python正则表达式最详解

    目录 一.正则表达式–元字符 1. 数量词 2. 字符匹配 3. 边界匹配 4. 组 5. 匹配模式参数 二.方法 re.findall re.match group匹配对象 re.search re.compile 三.检索和替换 re.sub 替换字符串 总结 一.正则表达式–元字符 re 模块使 Python 语言拥有全部的正则表达式功能 1. 数量词 # 提取大小写字母混合的单词 import re a = 'Excel 12345Word23456PPT12Lr' r = re.fin

  • python常用的正则表达式大全

    1.正则表达式 正则表达式是用来匹配与查找字符串的,从网上爬取数据自然或多或少会用到正则表达式,python的正则表达式要先引入re模块,正则表达式以r引导,例如: 其中**r“\d+”**正则表达式表示匹配连续的多个数值,search是re中的函数,从"abc123cd"字符串中搜索连续的数值,得到"123",返回一个匹配对象,结果如上. 2.字符串"\d"匹配0~9之间的一个数值 3.字符"+"重复前面一个匹配字符一次或者

  • Python正则表达式中的量词符号与组问题小结

    正则表达式中的符号 例子 | 是或的关系,只要存在就会被捕获 匹配到的数据只按字符串顺序返回,而不是按照匹配规则返回 In [18]: data = 'insane@loafer.com' In [19]: print(re.findall('insane|com|loafer', data)) ['insane', 'loafer', 'com'] ^ 等同于 \A In [20]: print(re.findall('^insane',data)) ['insane'] In [21]: p

  • Python语法学习之正则表达式的量词汇总

    目录 正则表达式中的符号 示例 - 1 示例 - 2 示例 - 3 示例 - 4 示例 - 5 示例 - 6 示例 - 7 示例 - 8 组的概念 贪婪模式与非贪婪模式 正则表达式中的符号 符号 描述 re1 | re2 匹配正则表达式 re1 或者 re2 :re1 与 re2 代表两个匹配的字符串信息 ^ 匹配字符串起始部分 $ 匹配字符串终止部分(也就是末尾部分) * 匹配0次或者多次前面出现的正则表达式 + 匹配1次或者多次前面出现的正则表达式 {N} 匹配 N 次前面出现的正则表达式

  • Python语法学习之进程的创建与常用方法详解

    目录 进程的创建模块 - multiprocessing 创建进程函数 - Process 进程的常用方法 start 函数 join 函数 kill 函数 与 is_alive 函数 进程的相关问题 该章节我们来学习一下在 Python 中去创建并使用多进程的方法,通过学习该章节,我们将可以通过创建多个进程来帮助我们提高脚本执行的效率.可以认为缩短脚本执行的时间,就是提高执行我们脚本的效率.接下来让我们都看一下今天的章节知识点都有哪些? 进程的创建模块 - multiprocessing 创建

  • Python语法学习之进程池与进程锁详解

    目录 进程池 什么是进程池 进程池的创建模块 - multiprocessing 创建进程池函数 - Pool 进程池的常用方法 apply_async 函数演示案例 close 函数与 join 函数 演示 进程锁 进程锁的概念 进程锁的加锁与解锁 NICE!大家好,在上一章节,我们学习了 multiprocessing 模块 的关于进程的创建与进场常用的方法的相关知识. 通过在一个主进程下创建多个子进程可以帮助我们加速程序的运行,并且提高工作效率.不过上一章节文末我们也说过进程的问题,由于每

  • Python语法学习之进程间的通信方式

    目录 什么是进程的通信 队列的创建 - multiprocessing 进程之间通信的方法 进程间的通信 - 队列演示案例 批量给 send 函数加入数据 小节 进程间通信的其他方式 - 补充 什么是进程的通信 这里举一个例子接介绍通信的机制:通信 一词大家并不陌生,比如一个人要给他的女友打电话.当建立了通话之后,在这个通话的过程中就是建立了一条隐形的 队列 (记住这个词).此时这个人就会通过对话的方式不停的将信息告诉女友,而这个人的女友也是在倾听着.(嗯…我个人觉得大部分情况下可能是反着来的)

  • Python语法学习之线程的创建与常用方法详解

    目录 线程的创建与使用 线程的创建 -threading 线程对象的常用方法 线程演示案例 线程的问题 线程的创建与使用 在Python中有很多的多线程模块,其中 threading 模块就是比较常用的.下面就来看一下如何利用 threading 创建线程以及它的常用方法. 线程的创建 -threading 函数名 介绍 举例 Thread 创建线程 Thread(target, args) Thread 的动能介绍:通过调用 threading 模块的 Thread 类来实例化一个线程对象:它

  • python语法学习之super(),继承与派生

    目录 1 什么是继承? 2 继承的规则 3 继承原理 4 多继承属性查询顺序 5 查找流程 属性查找 6 继承概念的实现 7 私有属性私有方法在继承中的表现 8 派生类 9 属性的覆盖(派生属性) 10 父类属性(方法)的重用 11 继承派生机制的作用 12 Super() 1 什么是继承? 继承是一种创建新类的方式: 在Python中,新建的类可以继承一个或多个父类,新建的类可称为子类或派生类,父类又可称为基类或超类. 继承可以用来解决类与类之间的代码重用性问题: class ParentCl

  • Python模块学习 re 正则表达式

    re.match re.match 尝试从字符串的开始匹配一个模式,如:下面的例子匹配第一个单词. 复制代码 代码如下: import re text = "JGood is a handsome boy, he is cool, clever, and so on..." m = re.match(r"(\w+)\s", text) if m: print m.group(0), '\n', m.group(1) else: print 'not match' r

  • python入门之基础语法学习笔记

    Python 中文编码 Python 文件中如果未指定编码,在执行过程会出现报错: Python中默认的编码格式是 ASCII 格式,在没修改编码格式时无法正确打印汉字,所以在读取中文时会报错. 解决方法为只要在文件开头加入 # -*- coding: UTF-8 -*- 或者 #coding=utf-8 就行了. Python 标识符 在 Python 里,标识符由字母.数字.下划线组成. 在 Python 中,所有标识符可以包括英文.数字以及下划线(_),但不能以数字开头. Python 中

  • Python进阶篇之正则表达式常用语法总结

    目录 正则表达式概述 1.点-匹配所有字符 2.星号-重复匹配任意次 3.加号-重复匹配多次 4. 花括号-匹配指定次数 5. 问号-贪婪模式和非贪婪模式 6.方括号-匹配几个字符之一 7.起始位置和单行.多行模式 8.括号-组选择 9.反斜杠-对元字符的转义 10.修饰符-可选标志 11.使用正则表达式切割字符串 正则表达式概述 正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配. Python 自1.5版本起增加了re 模块,它提供 Perl 风格的正则表达式模

随机推荐