正则表达式Re库介绍

举报
yd_221104950 发表于 2020/12/04 00:23:45 2020/12/04
【摘要】 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

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。