正则表达式的概念:
非常简洁的表达一组字符串的特征
正则表达式的编译
正则表达式编译之后才能表达一类字符串
正则表达式语法:
正则表达式是由字符和操作符构成
操作符
操作符 | 説明 | 实例 |
---|---|---|
. | 表示任意单个字符 | |
[] | 字符集,对单子字符给出取值范围 | [abc] |
[^] | 非字符集,对单子字符给出排除范围 | [^abc] |
* | 前一个字符0次或者无限次扩展 | abc* |
+ | 前一个字符1次或者无限次扩展 | abc+标识:abc,abcc,abccc等 |
? | 前一个字符0次或者1次扩展 | abc? 标识:ab,abc |
竖线 | 左右表达式任意一个 | 、 |
re库的match对象
match对象的属性
属性 | 说明 |
---|---|
.string | 待匹配的文本 |
.re | 匹配时使用的pattern对象(正则表达式) |
.pos | 正则表达式搜素文本的开始位置 |
.endps | 正则表达式搜素文本的结束位置 |
实验:
>>> import re
>>> match = re.search(r'[1-9]\d{5}', 'BIT 100081')
>>> if match:
print(match.group(0))
100081
>>> type(match)
<class '_sre.SRE_Match'>
group(0):
获取匹配的字符串
>>> import re
>>> m = re.search(r'[1-9]\d{5}', 'BIT 100081 TSU100084')
>>> m.string
'BIT 100081 TSU100084'
>>> m.pos
0
>>> m.endpos
20
>>> m.group(0)
'100081'
>>> m.start
<built-in method start of _sre.SRE_Match object at 0x000002156A827578>
>>> m.start()
4
>>> m.end
<built-in method end of _sre.SRE_Match object at 0x000002156A827578>
>>>
>>> m.end()
10
>>> m.spand()
Traceback (most recent call last):
File "<pyshell#11>", line 1, in <module>
m.spand()
AttributeError: '_sre.SRE_Match' object has no attribute 'spand'
>>> m.span()#二元位置
(4, 10)
正则匹配的贪婪模式
re库默认是贪婪模式,即输出匹配最长的字符串
>>> match = re.search(r'PY.*N','PYANBNCNDN')
>>> match.group(0)
'PYANBNCNDN'
如何匹配最小匹配
>>> a = re.search(r'PY.*?N','PYANBNCNDN')
>>> a.group(0)
'PYAN'
最小匹配操作符
操作符 | 说明 |
---|---|
*? | 前一个字符0次或无限扩展,最小匹配 |
+? | 前一个字符1次或无线次扩展,最小匹配 |
?? | 前一个字符0次或1次扩展,最小匹配 |
{m,n}? | 扩展前一个字符m-n次包含n,最小匹配 |