正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配。

Python 自1.5版本起增加了re 模块,它提供 Perl 风格的正则表达式模式。

re 模块使 Python 语言拥有全部的正则表达式功能。

本章节主要介绍Python中常用的正则表达式模式与实例。

1. 正则表达式模式

模式字符串使用特殊的语法来表示一个正则表达式:

字母和数字表示他们自身。一个正则表达式模式中的字母和数字匹配同样的字符串。

多数字母和数字前加一个反斜杠时会拥有不同的含义。

标点符号只有被转义时才匹配自身,否则它们表示特殊的含义。

1.1 "^"

"^d" 代表的意思是以d元素开头的任意一个字符串,也就是说只要是以d开头的字符串,后面的元素不论是什么,都是符合规则的,总之必须要以d开头。

“.” 较为常用,其代表的意思是任意字符,其表示的范围非常广,可以接任意字符,不论是中英文,还是下划线之类的特殊字符,都是可以代表的。举个栗子,正则表达式“^d.”就是代表以d开头的字符串,b后边接任意字符都可以。

“*” 也十分常用,其代表的意思是前面的字符可以重复任意多遍,可以是0次,1次,2次等任意多次。

以下为第一个实例,匹配的正则表达式"^z.*" z开头的后面接任意多任意类型的字母数字字符

如上图所示,该正则表达式能够顺利匹配得到string中某部分。

1.2 "$"

“$” 代表的意思是结尾字符。举个栗子,正则表达式“3$”,表示匹配以3为结尾的字符串。代码演示如下图所示。

看以下示例,很好理解,两个正则表达式分别匹配0结尾和2结尾的实例,结果当然匹配不到2结尾的字符串。因为string结尾是0。

1.3 "?"

贪婪匹配:正则表达式一般趋向于最大长度匹配,也就是所谓的贪婪匹配。

非贪婪匹配:就是匹配到结果就好。

首先看一个‘贪婪’的例子:

在这次贪婪模式的匹配下,匹配的是 "yes" and i say "no",因为默认为贪婪匹配,所以选取了最长的部分。

其次观察一下如果是‘非贪婪’的例子。

显然,加入模式字符“?”之后,进入了非贪婪模式,而不会选取最长的那一段。

为了加深理解,再来看一个贪婪与非贪婪的实例。(d+表示单个以及多个数字)

看看这个贪婪例子,得到这个结果由于以下原因:

1.由于存在‘.*’则这一部分在贪婪模式下会在满足正则表达式的情况下让匹配的段最长

2. d+表示任意长度的数字组合(至少有一个数字)

所以为了满足1的贪婪条件,2的数字组合长度为1

而第二种情况下,在‘.’后加上‘?’使得前面这一段变的非贪婪(即匹配到满足条件的即可),所以当它们匹配到第一个数字1时,就结束‘.*’ 这一部分的匹配,开始‘d+’这一部分。

1.4 {}

“{}”实质上也是一个限定词的用法,其限定前面字符所出现的次数,其常用的模式有三种,分别是“{数字}”、“{数字,}”和“{数字1, 数字2}”。举个例子,如“{1}”、“{1,}”和“{1, 3}”。

1.形式A 限定{}前字符数量

如下图所示,.{2}指定了两个之间有2个字符,所以不会匹配只有一个中间字符的‘pcp’,而且根据贪婪匹配原则,会选取前面‘.*’最长的匹配结果所以选择的是‘pbap’而不是‘pabp’,‘pcpp’

2.形式B “{1,}”代表的是前面的字符出现1次及以上;特殊字符“{2,}”代表的是前面的字符出现2次及以上;特殊字符“{3,}”代表的是前面的字符出现3次及以上;以此类推。举个栗子,如下图所示。

3.形式C “{2, 3}” 代表的是前面的字符至少出现2次,最多出现3次;

注意,这里采用了‘非贪婪’模式,所以出现第一个符合匹配正则表达式的部分之后,该p前面的部分将最短。

1.5 "|"

竖线“|”实质上是一个或的关系。并且当两个都满足时会优先匹配最前面的

还能够使用这种多层的匹配

为什么这里不是paa而是paap呢?因为match函数的规则。

也就是说re.match会从最左边开始匹配,并且要求必须在起始位置开始匹配。

那么这里的匹配可以理解为:paap14是在起始位置的,而paa14和起始位置paap14不符合(这里的起始不是指第一个,而是能从第一个字符向后匹配到某个字符,期间不断不少,个人理解)

1.6 "[]"

正则表达式特殊符号是“[]”。中括号十分实用,其有特殊含义,其代表的意思是中括号中的字符只要满足其中任意一个就可以。

A. 匹配模式为[abcd],在这里正则表达式代表的意思是字符串第一个字符是abcd四个字符中的任意一个。

B. [0-9]代表是的是0到9中任意一数字

C. [a-z]代表26个英文小写字母;[A-Z]代表26个英文大写字母。

D. [^],在中括号中加入特殊字符“^”,表示非,取反的意思。举个栗子,“[^1]”的意思是字符不等于1。

还有一些用法,以下就不一一实例了

2.特殊字符类

2.1 “s”与“S”

“s”代表的意思是匹配空格

s* 匹配多个空格

“S”代表的意思与“s”代表的意思刚刚相反,也就是说匹配的那个字符只要不是空格,都可以匹配。

2.2 [u4E00-u9FA5]

[u4E00-u9FA5]特殊字符是固定的写法,其代表的意思是汉字。换句话说,只要字符中是汉字,就可以通过该字符进行匹配,该特殊字符也是用中括号括起来的。

2.3 "w"与"W"

“w”代表的意思是该字符为任意字符,但是和特殊字符“.”的意思不同。

“w”代表的字符主要包括26个大写字母A到Z,即[A-Z]、26个小写字母a到z,即[a-z]、10个阿拉伯数字0到9,即[0-9]和下划线“_”。总结起来就是,“w”代表的意思是[A-Za-z0-9_]中任意一个字符。

“W”代表的意思与“w”刚刚相反,也就是匹配除了[A-Za-z0-9_]之外的其他字符。接上一步的例子,此时将“w”改为“W”。

对比:“.” 代表的意思是任意字符,其范围比“w”代表的意思要广。

3. 简单应用

用以上所学的正则表达式字符和模式实现一个简单的应用。

import 

以下就是今天所“查漏补缺”的正则表达式,目前还只是最基础的应用,下次会详细写python正则表达式的处理函数。

amigo幸运字符什么意思_Python正则表达式之初始篇:字符匹配相关推荐

  1. python中复制n次字符串_Python正则表达式,如何将字符串匹配n次 - python

    我想匹配包含单词100.00%的行,出现3次. 例如 some string 100.00% foo 100.00% 100.00% some string 99.91% foo 100.00% 99 ...

  2. python的字符编码叙述_Python: 熟悉又陌生的字符编码

    字符编码是计算机编程中不可回避的问题,不管你用 Python2 还是 Python3,亦或是 C++, Java 等,我都觉得非常有必要厘清计算机中的字符编码概念.本文主要分以下几个部分介绍: 基本概 ...

  3. python中怎么统计英文字符的个数_python怎样实现字符串中字符分类及个数统计

    python怎样实现字符串中字符分类及个数统计 发布时间:2020-11-20 17:31:18 来源:亿速云 阅读:105 作者:小新 小编给大家分享一下python怎样实现字符串中字符分类及个数统 ...

  4. python统计字符频次_Python 统计长字符串中字符频次

    以下笔记是我在 xue.cn 学习群之数据分析小组所整理分享的心得.相关背景是:我选择中文词频统计案例作为考察大家python基础功掌握程度. 通过<Python读取文件内容为字符串的方法> ...

  5. python中ascii码和字符的转换_python中ASCII码和字符的转换

    {"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],&q ...

  6. 正则只能出现特定字符_python正则表达式的简单使用总结

    原文作者:小哲,雷锋网 在编程中,经常会涉及到字符串的操作,一个常用的策略就是利用split函数,然后对于特定的字符串进行匹配,但是这种方法格式复杂,可复用性较差. 正则表达式是处理字符串匹配一个必不 ...

  7. 菜鸟教程python正则表达式_python 正则表达式详解

    python 正则表达式详解 1. 正则表达式模式 模式描述 ^ 匹配字符串的开头 $ 匹配字符串的末尾. . 匹配任意字符,除了换行符,当re.DOTALL标记被指定时,则可以匹配包括换行符的任意字 ...

  8. python正则表达式_Python正则表达式简记和re库!

    正则表达式是定义搜索模式的字符序列.通常这种模式被字符串搜索算法用于字符串上的"查找"或"查找和替换"操作,或者用于输入验证. 1. 正则表达式的语法 . 表示 ...

  9. python 正则表达式方法_Python正则表达式一: 基本使用方法

    学习python的正则表达式,主要有两个方面学习: 第一,学习如何写正则表达式,主要是掌握其语法规范.正则表达式的语法规范是通用的,对各种开发语言都是一致的. 第二,学习如何使用正则表达式,也就是掌握 ...

最新文章

  1. java获取栈最大值_实现O(1)获取最大最小值的栈----java
  2. 每日英语:Five Really Dumb Money Moves You've Got to Avoid
  3. .Net线程同步技术解读
  4. 基类数组存放派生类_永远不要将派生类数组赋值给基类类型指针
  5. hdu 1241Oil Deposits(BFS)
  6. 现实版“神笔马良”!“90后”小伙把贫困村画成网红景点!
  7. 提高篇 第二部分 字符串算法 第3章 Trie字典树
  8. 信安教程第二版-第12章网络安全审计技术原理与应用
  9. 晨哥真有料丨等女神分了我上位!
  10. android simple-xml,使用Maven构建Android项目-dexer在simple-xml依赖项上失败
  11. Futter基础第14篇: 中的按钮组件 RaisedButton、FlatButton、OutlineButton、IconButton、ButtonBar以及自定义按钮组件
  12. 为什么300的并发能把支持最大连接数4000数据库压死
  13. 003_如何正确的进入容器
  14. bp神经网络回归预测模型(python实现)_bp神经网络预测代码python
  15. 2021 编程语言排行榜出炉!
  16. c2-00支持java_双卡双待 诺基亚C2-00的外观详解
  17. 切图教程,app切图命名总结
  18. ENVI中出现tif文件无法直接打开
  19. 解决swagger几种报错问题
  20. pythonista免费下载-pythonista 3ios

热门文章

  1. mysql定时任务每天凌晨三点钟醒来_linux cron 下的定时执行工具使用技巧
  2. LeetCode初级算法之数组:36 有效数独
  3. Apache Hudi调研小记
  4. 五、NLP聊天语料处理
  5. npx mrm lint-staged 报错
  6. Flink任务失败,检查点失效:Exceeded checkpoint tolerable failure threshold.
  7. YbSoftwareFactory 代码生成插件【十三】:Web API 的安全性
  8. java和python结合做项目_由浅入深Java+Python结合项目实战
  9. UnicodeDecodeError: ‘gbk‘ codec can‘t decode byte 0xbd in position 115: illegal multibyte sequence
  10. phpstorm连接mysql