正则表达式:正则表达式也叫做匹配模式(Pattern),它由一组具有特定含义的字符串组成,通常用于匹配和替换文本。
正则表达式,是一个独立的技术,很多编程语言支持正则表达式处理。
什么是正则表达式(Regular Expression):
正则表达式历史:正则表达式的“鼻祖”或许可一直追溯到科学家对人类神经系统工作原理的早期研究。美国新泽西州的Warren McCulloch和出生在美国底特律的Walter Pitts这两位神经生理方面的科学家,研究出了一种用数学方式来描述神经网络的新方法,他们创新地将神经系统中的神经元描述成了小而简单的自动控制元,从而作出了一项伟大的工作革新。 在1956 年,出生在被马克·吐温(Mark Twain)称为“美国最美丽的城市之一的”哈特福德市的一位名叫Stephen Kleene的数学科学家,他在Warren McCulloch和Walter Pitts早期工作的基础之上,发表了一篇题目是《神经网事件的表示法》的论文,利用称之为正则集合的数学符号来描述此模型,引入了正则表达式的概念。正则表达式被作为用来描述其称之为“正则集的代数”的一种表达式,因而采用了“正则表达式”这个术语。 之后一段时间,人们发现可以将这一工作成果应用于其他方面。Ken Thompson就把这一成果应用于计算搜索算法的一些早期研究,Ken Thompson是 Unix的主要发明人,也就是大名鼎鼎的Unix之父。Unix之父将此符号系统引入编辑器QED,然后是Unix上的编辑器ed,并最终引入grep。Jeffrey Friedl 在其著作“Mastering Regular Expressions (2nd edition)”中对此作了进一步阐述讲解,如果你希望更多了解正则表达式理论和历史,推荐你看看这本书。 自此以后,正则表达式被广泛地应用到各种UNIX或类似于UNIX的工具中,如大家熟知的Perl。P
python如何使用正则:
一般而言,不同的编程都会提供对正则的支持,如java中,字符串对象中,有些方法直接支持正则,也同时提供正则的对应类
python也同样的道理,它为开发者提供了一个专门支持正则的模块 -- re
re模块:
常见方法:
compile()
search()
findall()
finditer()
sub()
split()
match("需要匹配的规则", 文本字符串) # 表示从头匹配


元字符:
. # 匹配任意符号,除换行符之外(\n)
\w # 匹配有效符号(大小写字母、数字、_、各国的语言符号(python3)),不匹配特殊符号, 等价于:[a-zA-Z0-9_]
\d # 匹配数字0~9 十个数字,等价于 [0123456789]
\s # 匹配的空白位 常见的如:空格、\t、\n等符号
[abcd] # 该位置,必须是abcd中的某个来占位,列举
|-- 匹配数字:[0123456789]、[0-9]
|-- 匹配小写字母:[a-z]
|-- 匹配大写字母:[A-Z]
|-- 有效符号:[a-zA-Z0-9_]
^ # 以什么开头
$ # 以什么结尾
反义符:
\W # 匹配特殊符号
\D # 匹配非数字
\S # 匹配非空白位
[^abcd] # 表示该位不能使用列举中的某个符号

转义符:
在绝多数的编程语言中,字符串操作都是存在转义符, \x
为什么在window系统的中,文件系统路径的分隔符是\\(本质最后是一个\)
正则中呢?
在正则中,反斜杠也存在转义的作用!!!
注意:在python中,如果出现路径等情况,建议使用r"regexp",这种方式,减少转义符多次转义!!
推荐:所有的正则表达式前面,都建议加上r!!!!!
重复(位数):
* # 任意位(0到多位)
+ # 1到多位
? # 表示0或者1,也就是说:可以没有,也可以有,但是有的话,只能是一位
{m} # 表示m位,m是个正整数
{m,} # 表示至少m位,可以更多
{m,n} # 表示范围区间[m, n] (m<=n)
课堂练习:
匹配出openlab的邮箱地址,且@之前有4到20为字符,如59127_ljh@openlab.com
[a-zA-Z0-9_]{4,20}@openlab\.com
分组:
多个组合的列举:
正则中,存在了一个|符号,表示的意思或者,多个中筛选
[a-zA-Z0-9_]{4,20}@openlab\.(com|org|cn|io)
括号除了在多个组合的列举作用外,还有一个非常重要的作用,就是分组
在正则表达式进行匹配的时候,在匹配完成之后,可以做二次匹配!!!
注意,分组是由括号完成的!!!
如何匹配一个标签:r"</?\w+>"
案例如下:

贪婪与懒惰:
正则表达式中,如果使用多位匹配,则存在了一个贪婪和非贪婪模式,
贪婪模式:尽可能多的匹配
非太贪婪模式:尽可能少的匹配
贪婪模式 --> 懒惰模式,只需要在位数的后面加上?

案例如下:

267

被折叠的 条评论
为什么被折叠?



