正则表达式Re库介绍
【摘要】 Re库是python的标准库,Re库采用raw string(原生字符串类型)表示正则表达式,如 r’[1-9]\d{5}’。
调用方法 :
import re
1
使用原生字符串(即不包含转义符的字符串)类型表示正则表达式会更方便。python有一个转义斜杠’’,在原生字符串中斜杠’'不会被解释成转义符。正则表达式也可以用String类型来表示,但是很繁琐。
...
Re库是python的标准库,Re库采用raw string(原生字符串类型)表示正则表达式,如 r’[1-9]\d{5}’。
调用方法 :
import re
- 1
使用原生字符串(即不包含转义符的字符串)类型表示正则表达式会更方便。python有一个转义斜杠’’,在原生字符串中斜杠’'不会被解释成转义符。正则表达式也可以用String类型来表示,但是很繁琐。
电话号码的两种正则表达式写法比较:
raw string原生字符串:r’\d{3}-\d{8}|\d{4}-\d{8}’
String字符串类型:’\\d{3}-\\d{8}|\\d{4}-\\d{8}’
字符串类型中对斜杠‘'进行了转义,为了避免斜杠被转义,我们需要用一个斜杠来转义它,这样子后,原来是杠的,变成杠杠。相比之下,原生字符串就显得方便多了。
Re库主要功能函数
函数 | 说明 |
---|---|
re.search() | 返回match对象,在一个字符串搜索匹配正则表达式的第一个位置 |
re.match() | 返回match对象,从一个字符串的开始位置起匹配正则表达式 |
re.findall() | 搜索字符串,以列表类型返回全部能匹配的子串 |
re.split() | 将一个字符串按照正则表达式匹配结果进行分割,返回列表类型 |
re.finditer() | 搜索字符串,返回一个匹配结果的迭代类型,每个迭代元素是match对象 |
re.sub() | 在一个字符串中替换所有匹配正则表达式的子串,返回替换后的字符串 |
示例代码:
import re
if __name__ == "__main__": # search(pattern, string, flags=0) # pattern正则表达式,可以是原生字符串类型(前面放个小r),也可以是字符串类型的正则表达式 # string 待匹配的内容 # flag是控制标记,有三种: # re.I 或 re.IGNORECASE,忽略正则表达式的大小写,[A-Z]也能够匹配小写字符 # re.M 或 re.MULTILINE ,作用在正则表达式中的^操作符,能够将给定的字符串的每行当作匹配的开始 # re.S 或 re.DOTALL,作用在正则表达式中的.操作符,能够匹配所有字符,默认匹配除换行外的所有字符。 match = re.search(r'[1-9]\d{5}', 'China 102256', re.I) # 一定要加if判断 if match: print(match.group(0)) # 从一个字符串的开始位置起匹配正则表达式 m_match = re.match(r'[1-9]\d{5}', '100002BiT') if m_match: print(m_match.group(0)) # 返回列表 list = re.findall(r'[1-9]\d{5}', 'BIT100005 188898TTu') print(list) # split(pattern, string, maxsplit=0, flags=0) # pattern正则表达式,可以是原生字符串类型(前面放个小r),也可以是字符串类型的正则表达式 # string 待匹配的内容 # maxsplit最大分割数,剩余部分将作为最后一个元素输出 # flag是控制标记,有三种: # re.I 或 re.IGNORECASE,忽略正则表达式的大小写,[A-Z]也能够匹配小写字符 # re.M 或 re.MULTILINE ,作用在正则表达式中的^操作符,能够将给定的字符串的每行当作匹配的开始 # re.S 或 re.DOTALL,作用在正则表达式中的.操作符,能够匹配所有字符,默认匹配除换行外的所有字符。 split = re.split(r'[1-9]\d{5}', 'BIT100005 188898TTu', maxsplit=1) print(split) # 返回一个匹配结果的迭代类型 for m in re.finditer(r'[1-9]\d{5}', 'BIT100005 188898TTu'): if m: print(m.group(0)) # sub(pattern, repl, string, count=0, flags=0): # pattern正则表达式,可以是原生字符串类型(前面放个小r),也可以是字符串类型的正则表达式 # repl 替换匹配字符串的字符串 # string 待匹配的字符串 # count匹配替换的最大次数 # flags控制标记,作用同上 sub = re.sub(r'[1-9]\d{5}', 'HelloWorld', 'BIT100005 188898TTu') print(sub) # 以下都是函数式的用法适合一次性操作,还有另外一种面向对象用法,编译后可以多次操作 # compile可以将正则表达式编译成一个对象 pat = re.compile(r'[1-9]\d{5}') rst = pat.search("BIT 899990") print(rst.group(0))
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
Match对象的属性
属性 | 说明 |
---|---|
.string | 待匹配文本 |
.re | 匹配时使用的pattern对象(正则表达式) |
.pos | 正则表达式搜索文本的开始位置 |
.endpos | 正则表达式搜索文本的结束位置 |
Match对象的四个常用方法
方法 | 说明 |
---|---|
.group(0) | 获得匹配后的字符串 |
.start() | 匹配字符串在原始字符串中的开始位置 |
.edn() | 匹配字符串在原始字符串中的结束位置 |
.span() | 返回(.start(),.end()) |
示例代码:
import re
if __name__ == "__main__": match = re.search(r'[1-9]\d{5}', 'BIT100005 188898TTu') print(match.string) print(match.re) print(match.pos) print(match.endpos) print(match.group(0)) print(match.start()) print(match.end()) print(match.span())
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
Re默认采用贪婪匹配,就是返回最长匹配。如果要获得最短匹配,要使用以下最小匹配操作符:
操作符 | 说明 |
---|---|
*? | 前一个字符0次或无限次扩展,最小匹配 |
+? | 前一个字符1次或无限次扩展,最小匹配 |
?? | 前一个字符0次或1次扩展,最小匹配 |
{m,n}? | 扩展前一个字符m至n次(含n),最小匹配 |
当有操作符可以匹配不同长度的时候,可以在这个操作符后面加?,获得最小匹配。
谢谢阅读
文章来源: blog.csdn.net,作者:WongKyunban,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/weixin_40763897/article/details/97136234
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)