Python合集之Python正则表达式(三)

1.在Python中使用正则表达式语法    

在Python中使用正则表达式时,是将其作为模式字符串使用。

例如:将匹配不是字母的一个字符的正则表达式表示为模式字符串,可以使用下面的代码:

'[^a-zA-Z]'

而如果将匹配以字母m开头的单词的正则表达式转换为模式字符串,则不能直接在其两侧添加引号定界符。

例如:下面的代码是不正确的:

'\bm\w*\b'

而是需要将其中的 \ 进行转义,转换后的结果为:

'\\bm\\w*\\b'

由于模式字符串可能包含大量的特殊字符和反斜杠,所以需要写为原生字符串,即在模式字符串前加r 或R.

例如:上面的模式字符串采用原生字符串表示为:

r'\bm\w*\b'

注:在编写模式字符串时,并不是所有的反斜杠都需要进行转换。例如,前面编写的正则表达式“^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 \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字符串正则表达式的相关知识,感兴趣的朋友可以关注我。

同时也可以关注下我的个人 微信订阅号,园子里面的文章也会第一时间在订阅号里面进行推送跟更新。

 

posted @ 2021-03-06 21:09  @睦  阅读(81)  评论(0编辑  收藏  举报