Python提供了re模块,用于实现正则表达式的操作。在实现时可以使用re模块提供的方法,(如search(),match(),findall()等)进行字符串处理也可以使用re模块compile()方法,将模式字符串转化为正则表达式对象,然后再使用该正则表达式对象的相关方法来操作字符串好吧。
re模块在使用时,需要先应用import语句引入,具体代码如下:
imporrt re
如果在使用re模块时,未将其引入,将抛出如图所示的异常
Traceback (most recent call last):
File "F:/python/ch1.py", line 1, in
re
NameError: name 're' is not defined
前面已说过match()的使用方法,现在我们来看看另外的两种匹配方法,即search()方法与findall()方法
1 使用search()方法进行匹配
search()方法用于在整个字符串中搜索第一个匹配的值,如果在起始位置匹配成功,则返回 Match对象。其语法格式如下:
re.search(pattern,string,[flags])
参数说明如下:
pattern:表示模式字符串,由要匹配的正则表达式转化而来,
string:表示要匹配的字符串
flags:可选参数,表示标志位,用于控制匹配方式,如是否区分字母大小写。常用的标志如下:
例如,搜索第一个以“mr_”开头的字符串,不区分字母大小写,代码如下:
import re
pattern = r'mr_\\w+'
string = 'MR_SHOP mr_shop'
match = re.search(pattern,string,re.l)
print(match)
string = '项目名称MR_SHOP mr_shop'
match = re.search(pattern,string,re.l)
print(match)
运行结果如下,
<_sre.SRE_Match object;span=(0,7),match="MR_SHOP">
<_sre.SRE_Match object;span=(4,11),match="MR_SHOP">
从上面的运行结果可以看出,search()方法不仅仅是在字符串的起始位置搜索,其他位置有符合匹配的也可以。
例:
验证是否出现危险字符:
代码及运行结果如上
3 使用findall()方法进行匹配
findall()方法用于在整个字符串中搜索所有符合正则表达式的字符串,列表的形式返回,并以如果匹配成功,则返回包含匹配结构的列表否则返回空列表,其语法格式如下:
re.findall(pattern,string,[flags])
参数说明同上表。
搜索以"mr_"开头的字符串,代码如下
import re
pattern = r'mr_\\w+'
string = 'MR_SHOP mr_shop'
match = re.findall(pattern,string,re.l)
print(match)
string = '项目名称MR_SHOP mr_shop'
match = re.findall(pattern,string,re.l)
print(match)
运行结果如下:
['MR_SHOP','mr_shop']
['mr_shop']
如果在指定的模式字符串中包含分组,则返回与分组匹配的文本列表,例如下面的代码:
运行结果如下:
如果在指定的模式字符串中包含分组,则返回与分组匹配的文本列表,例如下面的代码:
从上面的结果可以看出,并没有得到匹配的IP地址,这是因为在模式字符串中出现了分组,所以得到的结果是根据分组进行匹配的结果。即“(\\.[-9]{1,3})"匹配的结果,如果想获取整个模式字符串的匹配,可以将整个模式字符串使用一对小括号进行分组,然后在获取结果时直取返回值列表的每个元素(是一个元组)的第一个元素,代码如下:
运行结果如上。
到这里用re模块实现正则表达式的操作就完成了。
¥29.00
¥299.00
¥498.00
¥399.00