re 模块使 Python 语言拥有全部的正则表达式功能。
compile 函数根据一个模式字符串和可选的标志参数生成一个正则表达式对象。该对象拥有一系列方法用于正则表达式匹配和替换。
re 模块也提供了与这些方法功能完全一致的函数,这些函数使用一个模式字符串做为它们的第一个参数。
本章节主要介绍Python中常用的正则表达式处理函数。
re.match()
尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none。
re.match(pattern, string, flags=0)
参数描述
pattern :匹配的正则表达式
string :要匹配的字符串。
flags :标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。
flags详情:
re.I:使匹配对大小写不敏感
re.L:做本地化识别(locale-aware)匹配
re.M:多行匹配,影响 ^ 和 $
re.S:使 . 匹配包括换行在内的所有字符
re.U:根据Unicode字符集解析字符。这个标志影响 \w, \W, \b, \B.
re.X:该标志通过给予你更灵活的格式以便你将正则表达式写得更易于理解。
匹配成功re.match方法返回一个匹配的对象,否则返回None。
注意:match()从字符串的第一个字符开始匹配,当第一个字符不符合时,不在进行匹配
示例代码如下:
import re
p1 = r'CS_\w+'
p2 = 'CS_123 cs_111'
p3 = '测试CS_123 cs_111'
match = re.match(p1,p2,re.I)
match1 = re.match(p1,p3,re.I)
print(match)
print(match1)
结果为:
"D:\Program Files\Python39\python.exe" F:/python/Excel_CF/main.py
<re.Match object; span=(0, 6), match='CS_123'>
None
进程已结束,退出代码为 0
基于match()判别其开始位置、结束位置等
import re
p1 = r'CS_\w+'
p2 = 'CS_123 cs_111'
p3 = 'ACS_测试CS_sss'
match = re.match(p1,p2,re.I)
match1 = re.match(p1,p3,re.I)
print(match)
print(match1)
print("**************************************************")
print('匹配的起始位置为:',match.start())
print('匹配的结束位置为:',match.end())
print('匹配位置的元组为:',match.span())
print('匹配的字符串:',match.string)
print('匹配数据:',match.group())
print("**************************************************")
print('匹配的起始位置为:',match1.start())
print('匹配的结束位置为:',match1.end())
print('匹配位置的元组为:',match1.span())
print('匹配的字符串:',match1.string)
print('匹配数据:',match1.group())
结果为
"D:\Program Files\Python39\python.exe" F:/python/Excel_CF/main.py
<re.Match object; span=(0, 6), match='CS_123'>
None
**************************************************
匹配的起始位置为: 0
匹配的结束位置为: 6
匹配位置的元组为: (0, 6)
匹配的字符串: CS_123 cs_111
匹配数据: CS_123
**************************************************
Traceback (most recent call last):
File "F:\python\Excel_CF\main.py", line 16, in <module>
print('匹配的起始位置为:',match1.start())
AttributeError: 'NoneType' object has no attribute 'start'
进程已结束,退出代码为 1
由此可以看出,当match从第一个字母匹配失败时,match所调用的相关函数都无法使用