1.在Python中使用正则表达式语法
在Python中使用正则表达式时,是将其作为模式字符串使用。
例如:将匹配不是字母的一个字符的正则表达式表示为模式字符串,可以使用下面的代码:
'[^a-zA-Z]'
而如果将匹配以字母m开头的单词的正则表达式转换为模式字符串,则不能直接在其两侧添加引号定界符。
例如:下面的代码是不正确的:
'mw*'
而是需要将其中的 进行转义,转换后的结果为:
'\bm\w*\b'
由于模式字符串可能包含大量的特殊字符和反斜杠,所以需要写为原生字符串,即在模式字符串前加r 或R.
例如:上面的模式字符串采用原生字符串表示为:
r'mw*'
注:在编写模式字符串时,并不是所有的反斜杠都需要进行转换。例如,前面编写的正则表达式“^d{8}$”中反斜杠就不需要转义,因为其中的d并没有特殊意义。
2.使用re模块实现正则表达式操作
Python中提供了re模块,用于实现正则表达式的操作。在实现时,可以使用re模块提供的方法进行字符串处理,也可以先使用re模块的compile()方法将模式字符串转为换正则表达式对象,然后再使用该正则表达式对象的相关方法来操作字符串。
re模块在使用时,需要先应用import语句引入,具体代码如下:
import re
注:如果在使用re模块时,没有将其引入,将会抛出相关的异常信息。
2.1 使用match()方法进行匹配
match()方法用于将字符串的开始进行匹配,如果在起始位置匹配成功,则返回Match对象,否则返回None.其语法格式如下:
re.match(pattern,string,[flags])
参数说明:
pattern:表示模式字符串,由要匹配的正则表达式转换而来。
string:表示要匹配的字符串。
flags:可选参数,表示标志位,用于控制匹配方式,如是否区分字母大小写。常用的标志如下表。
标志 | 说明 |
A或ASCII | 对于w W B d D s S 只进行ASCII匹配(仅适用于Python3.X) |
I或IGNORECASE | 执行不区分字母大小写的匹配 |
M或MULTILINE | 将^和$用于包括整个字符串的开始和结尾的每一行(默认情况下,仅适用于整个字符串的开始和结尾处) |
S或DOTALL | 使用()字符匹配所有字符,包括换行符 |
X或VERBOSE | 忽略模式字符串中未定义的空格和注释 |
例如:匹配字符串是否以 “mr_”开头,不区分字母大小写,代码如下:
import re pattern=r'mr_w+' string='MR_SHOP mr_shop' match=re.match(pattern,string,re.I) print(match) string='项目名称MR_SHOP mr_shop' match=re.match(pattrtn,string,re.I) print(match)
执行结果如下:
<_sre.SRE_MATCH object;span=(0,7),match='MR_SHOP'> None
从上面的执行结果可以看出,字符串“MR_SHOP”以“mr_”开头,返回一个Match对象,而字符串“项目名称MR_SHOP”没有以“mr_”开头,将返回None。这是因为match()方法从字符串的开始位置开始匹配,当第一个字母不符合条件时,则不在进行匹配,直接返回None。
Match对象中包含了匹配值的位置和匹配的数据。其中,要获取匹配值得起始位置可以使用Match对象的start()方法;要获取匹配值得结束位置,可以使用end()方法,通过span()方法可以返回匹配位置的元组,通过string属性可以获取要匹配的字符串,例如:
import re pattern=r'mr_w+' string='MR_SHOP mr_shop' match=re.match(pattern,string,re.I) print('匹配值的起始位置:'match.start()) print('匹配值的结束位置:'match.end()) print('匹配位置的元组:'match.span()) print('要匹配的字符串:'match.string) print('匹配数据:'match.group())
执行结果如下:
匹配值的起始位置:0 匹配值的结束位置:7 匹配位置的元组:(0,7) 要匹配的字符串:MR_SHOP mr_shop 匹配数据:MR_SHOP
花絮:
本期的Python 字符串正则表达式就分享到这里,下期我们将继续分享Python字符串正则表达式的相关知识,感兴趣的朋友可以关注我。
同时也可以关注下我的个人 微信订阅号,园子里面的文章也会第一时间在订阅号里面进行推送跟更新。