Re库是python的标准库,Re库采用raw string(原生字符串类型)表示正则表达式,如 r’[1-9]\d{5}’。

调用方法 :

import

使用原生字符串(即不包含转义符的字符串)类型表示正则表达式会更方便。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))

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())

Re默认采用贪婪匹配,就是返回最长匹配。如果要获得最短匹配,要使用以下最小匹配操作符:

操作符

说明

*?

前一个字符0次或无限次扩展,最小匹配

+?

前一个字符1次或无限次扩展,最小匹配

??

前一个字符0次或1次扩展,最小匹配

{m,n}?

扩展前一个字符m至n次(含n),最小匹配

当有操作符可以匹配不同长度的时候,可以在这个操作符后面加?,获得最小匹配。

谢谢阅读