首页 > 代码库 > 走入计算机的第二十五天(内置模块3之正则表达式)

走入计算机的第二十五天(内置模块3之正则表达式)

一 什么是正则表达式

就其本质而言,正则表达式(或 RE)是一种小型的、高度专业化的编程语言,(在Python中)它内嵌在Python中,并通过 re 模块实现。正则表达式模式被编译成一系列的字节码,然后由用 C 编写的匹配引擎执行。

正则表达式的功能:字符串的模糊匹配查询。

二  re模块

不同的语言均有使用正则表达式的方法,python中是用re模块实现的。

使用的方法格式:变量名=re.re中的其中一个子模块("规则","内容")

元字符

1   .(点) :可以代替除换行符以外任意一个元素

1 # ret=re.findall("方..","方杰,方合意,方磊,光东,阿杰,李杰,方何军")    ##匹配出所有符合条件的元素
2 # print(ret)

2  ^  :匹配第一个 元素的类容,匹配不成功,也不会去匹配后面的元素

# ret=re.findall("^方.","方杰,方合意,方磊,光东,阿杰,李杰,方何军")   #匹配出所有符合条件的元素
# print(ret)

3 $ :匹配该对象的最后一个内容,不会去匹配其他位置的内容

 ret=re.findall("y..n$","方杰,方合意,方磊,光东,阿杰,李杰,方何军yuan")   #匹配出所有符合条件的元素
# print(ret)

4 * :匹配表达式内容的0次到无数次

#ret=re.findall("333\d*","333234214455,333255654534246,545556564367656653,4453576489780423")
# print(ret)

5 + : 匹配表达式内容的1次到无数次

#ret=re.findall("333\d+","3334214455,333255654534246,333,56564367656653,4453576489780423")
# print(ret)

6 ?: 匹配表达式内容的0次或者1次

# ret=re.findall("\d?","2342,43,7654,87")
# print(ret)

7 {}:自定义次数

#ret=re.findall("\d{16}","234214455,663255654534246,545556564367656653,4453576489780423")
# print(ret)

*,+,?等都是贪婪匹配,也就是尽可能匹配,后面加?号使其变成惰性匹配

# ret=re.findall(‘131\d+?‘,‘1312312312‘)
# print(ret) 

匹配一个数字包括整型和浮点型

 

# ret=re.findall("\d+\.?\d+","3555,8498,64.674,2344")
# print(ret)

 

转义符

1 反斜杠后面跟元字符,会去掉特殊的功能

# ret=re.findall("\.com","www.baidu.com,www.youji.com,www.xiongdi.com,www.ss.cn")
# print(ret)

2 反斜杠后面加上一些普通字符会实现一些特殊的功能

\d 匹配任何十进制数; 它相当于类 [0-9]。

 

# ret=re.findall("\d","yuan3236$655&34")
# print(ret)

 

\D 匹配任何非数字字符; 它相当于类 [^0-9]。

 

# ret=re.findall("\D","yuan3236$655&34")
# print(ret)

 

 

\s 匹配任何空白字符; 它相当于类 [ \t\n\r\f\v]。

 

# ret=re.findall("\s","hello i love like")
# print(ret)

 

\S 匹配任何非空白字符; 它相当于类 [^ \t\n\r\f\v]。

 

# ret=re.findall("\S","hello i love like")
# print(ret)

 

\w 匹配任何字母数字字符; 它相当于类 [a-zA-Z0-9_]。

 

# ret=re.findall("\w","yuan323665534")
# print(ret)


# ret=re.findall("\w+","yuan323665534")
# print(ret)

 

\W 匹配任何非字母数字字符; 它相当于类 [^a-zA-Z0-9_]

 

# ret=re.findall("\W","yuan3236$655&34")
# print(ret)

 

\b 匹配一个特殊字符边界,比如空格 ,&,#等\b是特殊符号所以前面需要加r

 

# ret=re.findall(r"i\b","hello i love like")
# print(ret)

# ret=re.findall(r"i\b","hello i love li$ke")
# print(ret)

 

分组  ()


ret=re.findall("(fang)","fangffksdl;hfangfangfnag") # print(ret) # # ret=re.findall("(fang)+","fangffksdl;hfangfangfnag") # print(ret)
# ret=re.findall("方","方杰,方合意,方磊,光东,阿杰,李杰,方何军")    ##匹配出所有符合条件的元素
# print(ret)
m = re.findall(r(ad)+, add) print(m) ret=re.search((?P<id>\d{2})/(?P<name>\w{3}),23/com) print(ret.group())#23/com print(ret.group(id))#23



#命名分组
ret=re.search(r"blog-aticles-(?P<year>20[01]\d)-(\d+)","blog-aticles-2005-12")
print(ret.group(‘year‘))

ret=re.search(r"blog-aticles-(?P<year>20[01]\d)-(?P<mansh>\d+)","blog-aticles-2005-12")
print(ret.group(‘mansh‘))

字符集  |

字符集 | 或者的意思 要配合 ()用的

# ret=re.findall("www\.(\w+)\.(com|cn)","www.baidu.com,www.youji.com,www.xiongdi.com,www.ss.cn")
# print(ret)

# ret=re.findall("www\.(?:\w+)\.(?:com|cn)","www.baidu.com,www.youji.com,www.xiongdi.com,www.ss.cn")
# print(ret)

字符集  []

字符集[]:  在[]里面多选一的效果  一个字符集只匹配一个字符
# ret=re.findall(r"a[bc]","abcjpofdabhiac")
# print(ret)

# ret=re.findall(r"a[bc]d","abdcjpofdabhiacd")
# print(ret)

# ret=re.findall(r"a[b.c]d","abcjpofdabhia.dc")
# print(ret)
字符集里面只有三个特殊符号:- ^ \
# ret=re.findall(r"[0-9]","ds1246634347cvkdhsd")
# print(ret)
#
#
# ret=re.findall(r"[a-z]","ds1246634347cvkdhsd")
# print(ret)
#
# ret=re.findall(r"[A-Z]","ds1246DSJFKS47cvkdhsd")
# print(ret)
#
# ret=re.findall(r"[A-Za-z0-9]","ds1246634347cvkdhsd")
# print(ret)

# ret=re.findall(r"a[\d]c","ds12a34c7cvkdhsd")
# print(ret)


# ret=re.findall(r"[^\d]","ds1246634347cvkdhsd")
# print(ret)


# ret=re.findall(r"[^\da-z]","ds1246634347cvk#dhsd")
# print(ret)

search  函数会在字符串内查找模式匹配,只到找到第一个匹配然后返回一个包含匹配信息的对象,没有则会则返回None,该对象可以通过调用group()方法得到匹配的字符串,如果字符串没有匹配,就会报错

#只有匹配到了一项内容就不会在继续匹配了
ret=re.search("(fang)+","fangffksdl;hfangfangfnag")
print(ret)
print(ret.group())

#没有匹配内容则会返回None,group()则会报错报错
ret=re.search("(fakl)+","fangffksdl;hfangfangfnag")
print(ret)
print(ret.group())

match  函数会在字符串开始位置查找模式匹配对象,没有则会则返回None,该对象可以通过调用group()方法得到匹配的字符串,如果字符串没有匹配,就会报错

#match  只匹配字符串开头的位置
# ret=re.match("(fang)+","fangffksdl;hfangfangfnag")
# print(ret)
# print(ret.group())

#开头位置匹配不上就会报错
# ret=re.match("(fang)+","sdffangffksdlaihngfangfnag")
# print(ret)
# print(ret.group())

 

 

 

 

 

 

走入计算机的第二十五天(内置模块3之正则表达式)