正则表达式学习笔记

简介

笔者的正则的学习笔记和思维导图

用处

  1. 字符串匹配
  2. 字符串查找
  3. IDE集成

如何学习

  1. 分类别记忆
  2. 多练习,无他,唯手熟尔。
  3. 潜龙勿用
正则表达式.png

1. 正则元字符

何为元字符,就是有特殊意义的字符比如\d, \w,可以分为

  1. 特殊单字符
    a. \d 任意数字, \D 任意非数字
    b. \w 任意字母数字下划线, \W 任意非字母数字下划线
    c. \s 任意空白符, **\S ** 任意非空白符
    d. . 任意字符(换行符除外)

  2. 空白字符
    a. \r 回车
    b. \n 换行
    c. \f 换页符
    d. \t 制表符
    e. \v 垂直制表符

  3. 量词
    a. * 0到多次
    b. + 1到多次
    c. ? 0到1次
    d. {m} 出现m次
    e. {m,} 出现至少m次
    f. {m, n} M到N次

  4. 范围处理
    a. | 如ab|ac 代表ab或者ac.
    b. [……]多选一,任意单个元素,注意[1,2]代表1 , 2三个元素但是[^1]代表非1
    c. [a-z] 匹配a到Z之间的任意单个字符。常用的[a-zA-Z0-9]

2. 正则匹配模式

  1. 贪婪匹配
import re
re.findall(r'a*', 'aaabbb')
['aaa', '', '', '', '']

默认是贪婪模式,尽可能多的去匹配字符串

  1. 非贪婪匹配
import re
re.findall(r'a*?', 'aaabbb')
['', 'a', '', 'a', '', 'a', '', '', '', '']

? 代表非贪婪匹配,尽可能少的匹配字符串

  1. 独占模式
    无论是贪婪模式还是非贪婪模式,都需要回溯才能完成相应功能。还有一种不需要回溯,叫独占模式,准确的形容为,不会交还已经匹配上的字符。
    独占模式具体的方法就是在量词后加上加号(+)。
    什么是回溯呢
    Exp:
pip install regex
ipython
import regex
regex.findall(r'a{1,3}abb', 'aaabb')
['aaabb']

regex.findall(r'a{1,3}+abb', 'aaabb')
Out[8]: []

regex.findall(r'a{1,3}?abb', 'aaabb')
Out[9]: ['aaabb']

贪婪模式下,会尽可能的多的匹配总费用,匹配第四个b时,碰到了c字符,需要回溯到前一个上在做c字符匹配。如果发生回溯,则可以匹配,如果不回溯,在独占模式下,则不匹配。

3. 分组与编号

正则表达式中()代表一个组。
Exp: 匹配重复字符串

text='man man , what`s the fuck fuck!'
rexp=r'(\w+)(\s+\1)+'
re.findall(rexp, text)
[('man', '  man'), ('fuck', ' fuck')]

正则表达式中 \1 就是前边 (\w+) 的值。
那么多个括号嵌套怎么算?
从第一个( 算起,编号从1到n,如果不想被引用,怎么办?
加入 ?:

rexp=r'(\w+)(?:\s+\1)(\2)'

这里(\2)不会生效。

这个功能设计看起来花里胡哨,如何落地使用呢??最简单的就是字符串替换


>>> import re
>>> test_str = "2020-05-10 20:23:05"
>>> regex = r"((\d{4})-(\d{2})-(\d{2})) ((\d{2}):(\d{2}):(\d{2}))"
>>> subst = r"日期\1 时间\5   \2年\3月\4日 \6时\7分\8秒"
>>> re.sub(regex, subst, test_str)
'日期2020-05-10 时间20:23:05   2020年05月10日 20时23分05秒'

4. 匹配模式

  1. 不区分大小写
>>> import re
>>> re.findall(r"cat", "CAT Cat cat", re.IGNORECASE)
['CAT', 'Cat', 'cat']

a. 不区分大小写模式的指定方式,使用模式修饰符 (?i)
b. 修饰符如果在括号内,作用范围是这个括号内的正则,而不是整个正则;
c. 使用编程语言时可以使用预定义好的常量来指定匹配模式。

  1. . 通配模式
    匹配任意字符可以用 [\s\S], [\d\D], [\w\W] 但是比较麻烦
    可以设置点号通配符
(?s).
  1. 多行模式
    (?m)
    正则中还有 \A 和 \z(Python 中是 \Z) 这两个元字符容易混淆,\A 仅匹配整个字符串的开始,\z 仅匹配整个字符串的结束,在多行匹配模式下,它们的匹配行为不会改变,如果只想匹配整个字符串,而不是匹配每一行,用这个更严谨一些

  2. 注释模式
    (?#comment)

5. 断言

  1. 单词边界
  2. 行的开始/结束
  3. 环视

6.转义字符

这里什么好说的,需要注意编程语言自身会做转义字符处理,正则还要做转义字符处理,有时候会是4个\

7. 历史

  1. POSIX
  2. PCRE

8 拓展

笔者认为:正则表达式是一种图灵不完备的编程范式,每种语言go、python、 java、js都有各自的实现与支持的规范。
但是正则表达式包含了常见语言的三要素:

  1. 顺序
  2. 分支 a|b
  3. 循环 *, +, {m, n}

甚至还有作用域()

结束语

持续学习和输出会让你更快乐

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

推荐阅读更多精彩内容