Python 标准库模块 - re

Python015

Python 标准库模块 - re,第1张

re模块被称为正则表达式,其作用为,创建一个“规则表达式”,用于验证和查找符合规则的文本,广泛用于各种搜索引擎、账户密码的验证等。

预定义字符:

\d:匹配所有的十进制数字0-9

\D:匹配所有的非数字,包含下划线

\s:匹配所有空白字符(空格、TAB等)

\S:匹配所有非空白字符,包含下划线

\w:匹配所有字母、汉字、数字a-z A-Z 0-9

\W:匹配所有非字母、汉字、数字,包含下划线

特殊字符:

$:匹配一行的结尾(必须放在正则表达式最后面)

^:匹配一行的开头(必须放在正则表达式最前面)

*:前面的字符可以出现0次或多次(0~无限)

+:前面的字符可以出现1次或多次(1~无限)

?:变"贪婪模式"为"勉强模式",前面的字符可以出现0次或1次

.:匹配除了换行符"\n"之外的任意单个字符

|:两项都进行匹配

[ ]:代表一个集合,有如下三种情况

[abc]:能匹配其中的单个字符

[a-z0-9]:能匹配指定范围的字符,可取反(在最前面加入^)

[2-9] [1-3]:能够做组合匹配

{ }:用于标记前面的字符出现的频率,有如下情况:

{n,m}:代表前面字符最少出现n次,最多出现m次

{n,}:代表前面字符最少出现n次,最多不受限制

{,m}:代表前面字符最多出现n次,最少不受

{n}:前面的字符必须出现n次

re模块是python独有的匹配字符串的模块,该模块中提供的很多功能是基于正则表达式实现的,

而正则表达式是对字符串进行模糊匹配,提取自己需要的字符串部分,他对所有的语言都通用。

1、字符

2、字符集

3、量词

贪婪模式:总是尝试匹配尽可能多的字符

非贪婪则相反,总是尝试匹配尽可能少的字符。

{0,} 匹配前一个字符 0 或多次,等同于 * 元字符

{+,} 匹配前一个字符 1 次或无限次,等同于 + 元字符

{0,1 }匹配前一个字符 0 次或 1 次,等同于 ? 元字符

如果 () 后面跟的是特殊元字符如 (adc)* 那么*控制的前导字符就是 () 里的整体内容,不再是前导一个字符

4、特殊分组用法表:只对正则函数返回对象的有用

5、断言

从断言的表达形式可以看出,它用的就是分组符号,只不过开头都加了一个问号,这个问号就是在说这是一个非捕获组,这个组没有编号,不能用来后向引用,只能当做断言。

匹配 <title>xxx</title>中 xxx : (?<=<title>).*(?=</title>)

自己理解就是:

5、例子

(1)非

^(?!.*200).*$ ,只匹配200

^(?!.*[200|400]).*$ ,只匹配200和400

[^a-z] 反取,不含a-z字母的

(2) \u4e00-\u9fa5 中文

(3) r"\b([\u4e00-\u9fa5]\s?[\u4e00-\u9fa5]+)\b" # 小 明 匹配这种单字中间有空格的

compile 函数用于编译正则表达式,生成一个正则表达式( Pattern )对象,供 match() 和 search() 这两个函数使用

match 尝试从字符串的 起始位置 匹配一个模式,如果不是起始位置匹配成功的话,返回none。

search 扫描 整个字符串 并返回 第一个成功 的匹配。

re.match与re.search的区别:

正则表达式替换函数

替换匹配成功的指定位置字符串,并且返回替换次数,可以用两个变量分别接受

(2) 两个字符以上切割,放在 [ ] 中(不保留分隔符):

(3) 使用 ( ) 捕获分组(保留分割符):

在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果没有找到匹配的,则返回空列表。

注意: match 和 search 是匹配一次 ,findall 匹配所有。

用法:

注意1:一旦匹配成,再次匹配,是从前一次匹配成功的,后面一位开始的,也可以理解为匹配成功的字符串,不在参与下次匹配

注意2:如果没写匹配规则,也就是空规则,返回的是一个比原始字符串多一位的,空字符串列表

注意3:正则匹配到空字符的情况,如果规则里只有一个组,而组后面是 * 就表示组里的内容可以是 0 个或者多过,这样组里就有了两个意思:

一个意思是匹配组里的内容,

二个意思是匹配组里 0 内容(即是空白)

所以尽量避免用 * 否则会有可能匹配出空字符串

正则表达式,返回类型为表达式对象的

如:<_sre.SRE_Match objectspan=(6, 7), match='a'>

返回对象的,需要用正则方法取字符串,

python通过re模块提供对正则表达式的支持。使用re的一般步骤是

1.先使用re.compile()函数,将正则表达式的字符串形式编译成Pattern实例。

2.然后使用Pattern实例处理文本并获得匹配结果(一个match实例),最后使用Match实例获得信息,进行其他的操作。

举一个简单的例子,在寻找一个字符串中所有的英文字符:

import re

pattern = re.compile(‘[a-zA-Z]')

result = pattern.findall('as3SiOP')

print result