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'>

原文地址:http://blog.51cto.com/12730062/2091707

时间: 2024-10-03 16:58:07

python3 re正则模块的相关文章

Python3中正则模块re.compile、re.match及re.search

本文实例讲述了Python3中正则模块re.compile.re.match及re.search函数用法.分享给大家供大家参考,具体如下: re模块 re.compile.re.match. re.search re 模块官方说明文档 正则匹配的时候,第一个字符是 r,表示 raw string 原生字符,意在声明字符串中间的特殊字符不用转义. 比如表示 '\n',可以写 r'\n',或者不适用原生字符 '\n'. 推荐使用 re.match re.compile() 函数 编译正则表达式模式,

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

Python3中正则模块re.compile.re.match及re.search函数用法 re模块 re.compile.re.match. re.search 正则匹配的时候,第一个字符是 r,表示 raw string 原生字符,意在声明字符串中间的特殊字符不用转义. 比如表示 ‘\n',可以写 r'\n',或者不适用原生字符 ‘\n'. 推荐使用 re.match re.compile() 函数 编译正则表达式模式,返回一个对象.可以把常用的正则表达式编译成正则表达式对象,方便后续调用及

python_way day6 反射,正则 模块

python_way day6 反射 正则 模块 一.模块: 1.sys & os: 我们在写项目的时候,经常遇到模块互相调用的情况,但是在不同的模块下我们通过什么去可以找到这些模块的位置哪? 那就是环境变量! 如何查看当前的环境变量?a = sys.pathprint(a)['D:\\资料\\python\\oldboy13\\jobs\\day5\\conf', 'D:\\资料\\python\\python35\\lib\\site-packages\\requests-2.10.0-py

python 正则模块的使用(re)说明

python 正则模块的使用(re)说明 正则表达式使用反斜杆(\)来转义特殊字符,使其可以匹配字符本身,而不是指定其他特殊的含义.这可能会和python字面意义上的字符串转义相冲突,这也许有些令人费解.比如,要匹配一个反斜杆本身,你也许要用'\\\\'来做为正则表达式的字符串,因为正则表达式要是\\,而字符串里,每个反斜杆都要写成\\. 你也可以在字符串前加上 r 这个前缀来避免部分疑惑,因为 r 开头的python字符串是 raw 字符串,所以里面的所有字符都不会被转义,比如r'\n'这个字

python3使用csv模块读写csv文件

python3使用csv模块读写csv文件 读取csv文件: import csv #打开文件,用with打开可以不用去特意关闭file了,python3不支持file()打开文件,只能用open() with open("XXX.csv","r",encoding="utf-8") as csvfile: #读取csv文件,返回的是迭代类型 read = csv.reader(csvfile) for i in read: print(i) 存

Python3 内建模块 hashlib、itertools、HTMLParser、urllib

Python的hashlib提供了常见的摘要算法,如MD5,SHA1等等. 什么是摘要算法呢?摘要算法又称哈希算法.散列算法.它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(通常用16进制的字符串表示). 举个例子,你写了一篇文章,内容是一个字符串'how to use python hashlib - by Michael',并附上这篇文章的摘要是'2d73d4f15c0db7f5ecb321b6a65e5d6d'.如果有人篡改了你的文章,并发表为'how to use pytho

Python3.4 asyncio模块简介

这个模块提供了在单个线程上使用协程,适用基于网络及其他资源,有关IO密集型的服务端及客户端程序. 模块细节如下: 适用于多系统可拆卸的事件循环(event loop)系统: 数据传输(transport)和协议抽象(类似于Twisted): 对TCP.UDP.SSL.子进程管道.延时调用(delayed calls)和其他一些系统特有的传输协议支持的实现: a Future class that mimics the one in the concurrent.futures module, b

python学习day19正则模块

正则模块:正则所有程序员都要用到正则爬虫方向要求对正则表达式掌握牢固正则表达式:是一种客观存在的规则re模块,是python提供的操作正则表达式的工具正则表达式在所有语言中都是通用的中括号在正咋中是字符集,只能正序,由小到大.(点)是匹配除了换行以外所有字符\w小写w匹配字母或数字或下划线\s匹配任意的空白符\n匹配一个换行符\d匹配所有数字\t匹配一个制表符\b匹配一个单词的结尾\^匹配字符串的开始   在字符集里面就是\$匹配字符串结尾\W大写的w  匹配非字母或数字或下划线\ID匹配非数字

Python3 内建模块 datetime/collections/base64/struct

datetime 我们先看如何获取当前日期和时间: >>> from datetime import datetime >>> now = datetime.now() # 获取当前datetime >>> print(now) 2015-05-18 16:28:07.198690 >>> print(type(now)) <class 'datetime.datetime'> 注意到datetime是模块,datetim