正则表达式

Posted lzzz

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了正则表达式相关的知识,希望对你有一定的参考价值。

 

import re

patten = re.compile(r".")   //将正则表达式的字符串编译为一个对象

r0 = patten.manth("f")    //使用正则表达式的对象匹配指定字符串,

匹配成功返回匹配到的字符的下标 span(0,1) ,否则返回None

----------匹配单个字符与数字---------

. 匹配除换行符以外的任意字符

#匹配数字
[0123456789] []是字符集合,表示匹配方括号中所包含的任意一个字符
[0-9] 匹配任意数字,类似[0123456789]
d 匹配数字,效果同[0-9]

#匹配字母
[hfjsghe] 匹配good中任意一个字符
[a-z] 匹配任意小写字母
[A-Z] 匹配任意大写字母

#匹配数字和字母
[0-9a-zA-Z] 匹配任意的数字和字母


#匹配数字,字母,_
[0-9a-zA-Z_] 匹配任意的数字、字母和下划线
w 匹配数字,字母和下划线,效果同[0-9a-zA-Z_]


[^abc] 匹配除了good这几个字母以外的所有字符,中括号里的^称为脱字符,表示不匹配集合中的字符


[^0-9] 匹配所有的非数字字符
D 匹配非数字字符,效果同[^0-9]


[^0-9a-zA-Z_]
W 匹配非数字,字母和下划线,效果同[^0-9a-zA-Z_]


s 匹配任意的空白符(空格,回车,换行,制表,换页),效果同[ f]
S 匹配任意的非空白符,效果同[^ f ]

 

--------------锚字符(边界字符)-------------

^ 行首匹配,和在[]里的^不是一个意思
$ 行尾匹配

A 匹配字符串开始,它和^的区别是,A只匹配整个字符串的开头,即使在re.M模式下也不会匹配它行的行首
 匹配字符串结束,它和$的区别是,只匹配整个字符串的结束,即使在re.M模式下也不会匹配它行的行尾


 匹配一个单词的边界,也就是值单词和空格间的位置
B 匹配非单词边界

 

 

-------------------匹配多个字符------------------------

 

说明:下方的x、y、z均为假设的普通字符,n、m(非负整数),不是正则表达式的元字符
(xyz) 匹配小括号内的xyz(作为一个整体去匹配)

 

x? 匹配0个或者1个x
x* 匹配0个或者任意多个x(.* 表示匹配0个或者任意多个字符(换行符除外))
x+ 匹配至少一个x

 


x{n} 匹配确定的n个x(n是一个非负整数)
x{n,} 匹配至少n个x
x{n,m} 匹配至少n个最多m个x。注意:n <= m

 


x|y   |表示或,匹配的是x或y

 

总结:
|:两边的正则表达式是或者的关系,在匹配的过程中,只要有其中的一个满足即可
():是一个整体
注意:在书写正则表达式的时候,不要随意添加空格

 


-------------------子模式------------------------

#正则表达式中的()表示一个整体,另外一个用法用于表示子模式【如果在一个正则表达式中出现需要重复校验的内容,
# 后面出现的就可以直接使用前面书写号的正则表达式,识别的方式为(),从左往右依次给()编号,分别1,2.。。所以,子模式
# 使用1.2....的方式表示】
pattern = re.compile(r"<([a-z]+)><(w+)>w*</2></1>")
r0 = pattern.search("<div><span>hello</span></div>")

print(r0.group()) 整个正则表达式匹配到的内容
print(r0.group(1)) 第一个子模式匹配到的内容
print(r0.group(2)) 第二个子模式匹配到的内容


-------------------贪婪和非贪婪------------------------

?: 非贪婪
+: 贪婪
*: 贪婪

 

-------------------模式修正------------------------

#1.re.I :ignorecase 忽略大小写进行匹配

#2.re.M,more,多行模式

 

-------------------re模块中的常用函数------------------------

#1.compile():编译,将正则表达式的字符串编译为一个对象
#辅助其他函数的使用

 

#2.match(),匹配
#如果匹配上,则返回匹配到的对象,如果匹配不上,则返回一个None
#r0 = re.match(r"[4-8]","6")

 

#3.search(),搜索,底层的实现使用的match
#只要匹配到第一个,则停止搜索,如果匹配上,得到的结果为一个对象
#r1 = re.search(r"d+","463423"

 

#4.findall(),搜索全部,
#将所有符合条件的全部搜索出来,返回一个列表
#r2 = re.findall(r"d+","463423")

 

#5.split():分割
#返回一个列表
#str1 = "one1two1three1four1"
#list1 = str1.split("1")
#print(list1)

 

#6.sub(),替换
#参数:正则表达式【旧的字符串】,新的字符串,原字符串
text = "today is a good day today is a bad day today is a nice day"
#需求:将其中的空格替换为-连接所有的单词

 

























































以上是关于正则表达式的主要内容,如果未能解决你的问题,请参考以下文章

PHP 正则表达式总结

正则表达式

正则表达式

正则表达式“或“的使用

正则表达式 验证数字格式 非负数 小数点后保留两位 数字正则 double正则

JS正则表达式详解