python3 re正则模块

Posted

tags:

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

一、常用的正则表达式:

1、".":默认匹配除\n之外的任意一个字符,若指定flag DOTALL,则匹配任意字符,包括换行

2、"^":匹配字符开头,若指定flag MULTILINE,这种也可以匹配上(r"^a","\nabc\neee",flags=re.MULTILINE)

3、"$":匹配字符结尾,或re.search("foo$","bfoo\nsdfsf",flags=re.MULTILINE).group()也可以

4、"*":匹配*号前的字符0次或多次,re.findall("ab*","cabb3abcbbac")结果为["abb","ab","a"]

5、"+":匹配前一个字符1次或多次,re.findall("ab+","ab+cd+abb+bba")结果为["ab","abb"]

6、"?":匹配前一个字符1次或0次

7、"{m}":匹配前一个字符m次

8、"{n,m}":匹配前一个字符n次到m次,re.findall("ab{1,3}","abb abc abbcbbb")结果为["abb","ab","abb"]

9、"|":匹配"|"左或"|"右的字符,re.search("abc|ABC","ABCBabcCD").group()结果["ABC"]

10、"(...)":分组匹配,re.search("(abc){2}a(123|456)c","abcabca456c").group()结果为"abcabca456c"

11、"\A":只从字符开头匹配,re.search("\Aabc","Xiaoabc")是匹配不到的

12、"\Z":匹配字符结尾,同"$"

13、"\d":匹配数字0-9

14、"\D":匹配非数字

15、"\w":匹配[A-Za-z0-9]

16、"\W":匹配非[A-Za-z0-9]

17、"\s":匹配空白字符,\t、\n、\r,re.search("\s+","ab\tc1\n3").group()结果为"\t"

18、"(?P<name>...)":分组匹配,re.search("(?P<province>[0-9]{4})(?P<city>[0-9]{2})(?P<birthday>[0-9]{4})","371481199306143242").groupdict("city")结果为{'province': '3714', 'city': '81', 'birthday': '1993'}


二、匹配模式

1、match:从字符开头往后匹配,^在此模式下没有用

2、search:从整个文本去搜索,如果出现一次则返回

3、findall:返回所有匹配到的值,此模式没有group方法

4、split:可以起到分割作用

5、sub:替换,也是就是匹配到之后替换


三、示例

1、>>> re.match("Xiao\d+","Xiao123Ming321")            //表示匹配数字一次或多次

<_sre.SRE_Match object; span=(0, 7), match='Xiao123'>


2、>>> re.match("M.+g$","Xiao123Ming321")             //想把Ming取出来的话,使用match是不好使的,要使用search模式

>>> re.search("M[a-z]+a","Xiao123Ming321a")         //注意看这两个正则的含义

>>> re.search("M[a-z]+a$","Xiao123Ming321a")

>>> re.search("M[a-z]+","Xiao123Ming321a")         //此处是正确匹配"Ming",如果字符串为"Xiao123MINg321a",匹配条件应该为"M[a-zA-Z]+"

<_sre.SRE_Match object; span=(7, 11), match='Ming'>


3、>>> re.search("#.+#","123#hello#")               //匹配"#"和"#"之间有任意字符

<_sre.SRE_Match object; span=(3, 10), match='#hello#'>


4、>>> re.search("aaa?","aabcaaa")                //"?"匹配前面的字符0次或1次,"aa?"就是匹配第二个a0次或一次,"aaa?"就是匹配第三个a0次或1次

<_sre.SRE_Match object; span=(0, 2), match='aa'>

>>> re.search("aaa?","abcaaa")

<_sre.SRE_Match object; span=(3, 6), match='aaa'>


5、>>> re.search("[0-9]{3}","a1b2c123aaa")                 //[0-9]{3}匹配任意数字3次

<_sre.SRE_Match object; span=(5, 8), match='123'>


>>> re.search("[0-9]{1,3}","a1b2c123aaa")                 //[0-9]{1,3}匹配数字最少一次,最多三次,如果想全部匹配出数字,需要用findall匹配模式

<_sre.SRE_Match object; span=(1, 2), match='1'>


>>> re.findall("[0-9]{1,3}","a1b2c123aaa")

['1', '2', '123']


6、>>> re.search("abc|ABC","ABC2c123abc")                 //"|"为或者的意思           

<_sre.SRE_Match object; span=(0, 3), match='ABC'>


7、>>> re.search("abc{2}","ABC2c123abcc")

<_sre.SRE_Match object; span=(8, 12), match='abcc'>

>>> re.search("(abc){2}","ABC2c123abcabc")                //(...)意思是把括号中的字符当做一个整体

<_sre.SRE_Match object; span=(8, 14), match='abcabc'


>>> re.search("(abc){2}(\|\|=){2}","ABC2c123abcabc||=||=")                //"="不需要转义

<_sre.SRE_Match object; span=(8, 20), match='abcabc||=||='>


8、>>> re.search("\A[0-9]+[a-z]\Z","1213213a")             //\A等同于"^",\Z等同于"$"

<_sre.SRE_Match object; span=(0, 8), match='1213213a'>


9、>>> re.search("\D+","$-  \n\ta")                    //"\D"匹配除数字之外的任意字符,包括\n、\t

<_sre.SRE_Match object; span=(0, 7), match='$-  \n\ta'>


10、>>> re.search("(?P<id>[0-9]+)(?P<name>[A-Za-z]+)","abc23ccc").groupdict()    //可以把匹配的东西设置为字典

{'id': '23', 'name': 'ccc'}

>>> a =re.search("(?P<id>[0-9]+)(?P<name>[A-Za-z]+)","abc23ccc").groupdict()

>>> print(a["name"])

ccc

>>> a =re.search("(?P<id>[0-9]+)(?P<name>[A-Za-z]+)","abc23ccc").group("name")

>>> print(a)

ccc

11、>>> re.split("[0-9]","abc12def3d")     //split可以对字符串进行分割

['abc', '', 'def', 'd']

>>> re.split("[0-9]+","abc12def3d")

['abc', 'def', 'd']


12、>>> re.sub("[0-9]","A","abc12def3d")    //"[0-9]"为匹配模式,"A"匹配到之后要改为的值

'abcAAdefAd'

>>> re.sub("[0-9]","A","abc12def3d",count=2)         //count指定只替换前N个

'abcAAdef3d'


13、>>> re.search(r"\\","abc12d\\ef3d")             //匹配两个反斜杠

<_sre.SRE_Match object; span=(6, 7), match='\\'>


14、>>> re.search("[a-z]+","abcABC",flags=re.I)           //flags=re.I为忽略大小写

<_sre.SRE_Match object; span=(0, 6), match='abcABC'>


15、>>> re.search("^a","\nabcABC\ndd\nccde")     //匹配不到

>>> re.search("^a","\nabcABC\ndd\nccde",flags=re.M)    

<_sre.SRE_Match object; span=(1, 2), match='a'>


16、>>> re.search(".+","\nabcABC\ndd\nccde")     

<_sre.SRE_Match object; span=(1, 7), match='abcABC'>

>>> re.search(".+","\nabcABC\ndd\nccde",flags=re.S)        //flags=re.S也可匹配\n

<_sre.SRE_Match object; span=(0, 15), match='\nabcABC\ndd\nccde'>




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

Python3中正则模块re.compilere.match及re.search函数用法详解

Python3中正则模块re.compilere.match及re.search函数

python3+ 模块学习 之 re

python3怎么导入re模块

正则表达式(python3-re模块示例)

python3 正则表达式re模块