Day17 正则表达式

一.正则表达式

1.什么是正则表达式

正则表达式是处理字符串的工具, 通过不同的正则符号来描述字符串的规则

2.正则符号(正则表达式的语法)

匹配符号 意义
普通字符 代表字符本身
. 匹配任意一个字符, 一个点只能匹配一个字符
\w 匹配一个数字, 字母或者_(在ASCII码表中),一个\w只能匹配一个字符
\d 匹配任意一个数字字符
s 匹配任意一个空白字符, 空白字符包括: 空格字符, 换行字符, 制表符
\D 匹配除了数字字符以外的任意字符(匹配一个非数字字符)
\S 匹配一个非空白字符
[字符集] 匹配字符集中出现的任意一个字符
[^字符集] 匹配不在字符集中的任意一个字符

普通字符:除了在正则中有特殊功能和特殊意义的符号以外的符号以外的字符都算普通字符

检测符号 意义
\b 检查是否是单词边界
^ 检查^所在的位置是不是字符串开头
$ 检查$所在的位置是否是字符串结尾

单词边界 - 能够将两个单词隔开并且不会产生歧义的任意符号: 空白字符, 标点符号, 字符串开头和字符串结尾
匹配规则: 先去掉\b对字符串进行匹配, 如果匹配成功再检查\b所在的位置是否是单词边界

匹配次数 意义
* 匹配0次或者多次
+ 匹配1次或者多次
? 匹配0次或者1次
{N} 匹配N次
{M,} 至少匹配M次
{,N} 至少匹配N次
{M,N} 至少匹配M次,至多匹配N次

3.贪婪和非贪婪匹配

在匹配次数不确定的时候, 会出现贪婪和非贪婪两种情况; 默认情况都是贪婪的

什么是贪婪: 在能够匹配成功的前提下, 匹配次数尽可能多
什么是非贪婪: 在能够匹配成功的前提下, 匹配次数尽可能少; (在匹配次数后面加?)

3.1分支 |

正则1|正则2 - 先让正则1去匹配, 如果匹配成功就成功; 匹配失败再让正则2去匹配(正则1和正则2中只要有一个能匹配成功就行)

3.2分组 ()

1)整体操作
r'(\d{2}|[A-Z]{2})abc'    - 匹配一个字符串后面是abc, 前面是两个数字或者两个大写字母
r'([A-Z]\d){3}'     - a2a2a2
2)分组
a.分组截取: 方便后面分段或者分情况取不同的匹配结果
b.分组重复: 在正则中用\X来重复前面第X个分组匹配到的内容

注意: \X的前面必须有这个分组

3.3转义字符 \
1) \

在正则中有特殊功能和特殊意义的符号前加, 让这个符号的特殊功能和意义消失

2) []

在[]中有特殊意义的符号: a. ^放在开头, b. -放在两个字符之间
其他符号包括: ., +, ?, *, $ 这些单独的符号在[]中都表示符号本身

二.re模块

re模块是python提供的, 专门针对正则表达式应用的相关函数

1.compile(正则表达式)

将正则表达式转换成正则对象

2.字符串匹配

fullmatch(正则表达式, 字符串)   - 让正则表达式和字符串完全匹配
match(正则表达式, 字符串)       - 匹配字符串开头

以上两个方法的结果: 匹配失败结果是None, 匹配成功会返回匹配对象

1)匹配对象

a.获取匹配到的字符串

匹配对象.group() - 获取整个正则表达式匹配到的字符串, 结果是字符串
匹配对象.group(N) - 获取整个正则表达式中第N个分组匹配到的字符串

b.获取匹配到的字符串在原字符串的位置信息

匹配对象.span() -> 返回匹配结果在原字符串中的下标范围: [开始下标, 结束下标)
匹配对象.span(N) -> 返回第N个分组匹配的结果在原字符串中的范围

c.获取原字符串

匹配对象.string

3.查找

1)search(正则表达式, 字符串)

在字符串中查找第一个满足正则表达式的子串, 如果找到了结果是匹配对象, 找不到结果是None

2)findall(正则表达式, 字符串)

获取字符串中所有满足正则表达式的子串; 返回值是一个列表

注意: 如果正则表达式中有分组, 列表中的匹配结果只会取分组匹配到的内容

4.切割

split(正则表达式, 字符串)

将字符串中满足正则表达式的字串作为切割点对字符串进行切割; 返回一个字符串列表

5.替换

sub(正则表达式, 字符串1, 字符串2)

将字符串2中所有满足正则表达式的字串都替换成字符串1

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 229,406评论 6 538
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 99,034评论 3 423
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 177,413评论 0 382
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 63,449评论 1 316
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 72,165评论 6 410
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 55,559评论 1 325
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 43,606评论 3 444
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 42,781评论 0 289
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 49,327评论 1 335
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 41,084评论 3 356
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 43,278评论 1 371
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 38,849评论 5 362
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 44,495评论 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 34,927评论 0 28
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 36,172评论 1 291
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 52,010评论 3 396
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 48,241评论 2 375

推荐阅读更多精彩内容

  • 1.正则基本符号 1.1.什么是正则表达式正则表达式就是字符匹配的工具;是由正则符号和普通字符组成,来匹配不同规律...
    未醒的梦_19b0阅读 461评论 0 0
  • 前言回顾 1.运算符重载 通过在类中实现运算符对应的魔法方法,来让类的对象支持相关运算符的操作 2.内存管理(面试...
    不语sun阅读 367评论 0 0
  • 1.什么是正则表达式 1.正则基本符号正则表达式就是字符匹配的工具;是由正则符号和普通字符组成,来匹配不同规律的字...
    学python的铁头娃阅读 385评论 0 0
  • 1.正则基本符号 1.什么是正则表达式正则表达式就是字符匹配工具;是由正则符号和普通字符组成,来匹配不同规律的字符...
    杨海py阅读 801评论 0 0
  • 冬播一粒种,暖现绿枝丫。 夏已三伏日,何时绽朵霞?
    雨落云嫣阅读 135评论 0 3