Python进阶之路 正则表达式的创建与匹配

正则表达式的创建与匹配

Python中有正则表达式的函数都在re模块中,所以第一步是先导入re模块。

import re

向re.compile()传入一个字符串值,表示正则表达式,它将返回一个Regex模式对象(或者就简称为Regex对象)。

要创建一个Regex对象来匹配电话号码模式,就输入以下代码(回忆一下,\d表示"一个数字字符",\d\d\d-\d\d\d-\d\d\d\d是正确电话号码模式的正则表达式)


import re
numregex = re.compile(r'\d\d\d-\d\d\d-\d\d\d\d')	# 创建Regex对象

Regex对象的search()方法查找传入的字符串,寻找该正则表达式的所有匹配。如果字符串中没有找到该正则表达式模式,search()方法将返回一个Match对象。Match对象有一个group()方法,它返回被查找字符串中实际匹配的文本。

import re

phonenumregex = re.compile(r'\d\d\d-\d\d\d-\d\d\d\d')   # 创建Regex对象,并保存在phonenumregex
mo = phonenumregex.search('My number is 400-555-8888.') # 使用search()方法匹配括号()例传入的值是否符合Regex对象
print('phone number found: ' + mo.group())

输出结果:

phone number found: 400-555-8888

变量名mo是一个通用的名称,用于Match对象。这个例子可能初看起来有点复杂,但它比前面没用正则表达式的程序要简短很多,并且做的事情一样。

这里,我们将电话的格式传递给re.compile(),并将得到Regex对象保存在phonenumregex中。然后我们在phonenumregex上调用search()方法,向search()方法传入想要查找和Regex对象中格式一样的字符串。查找的结果保存在变量mo中。在这个例子例,我们知道要查找的格式会在这个字符串中找到,所以我们知道会返回一个Match对象。知道mo包含一个Match对象,而不是控制None,我们就可以在mo变量上调用group()方法,返回匹配的结果。将mo.group()写在打印语句中,显示已经查找到匹配格式的电话号码,即400-555-8888。

向re.compile()传递原始字符串,回忆一下,Python中转义符使用反斜杠()。字符串’\n’表示一个换行符,而不是反斜杠加上一个小写的n。你需要输入转义字符\,才能打印出一个反斜杠。所以’\n’表示一个反斜杠加上一个小写的n。但是,通过在字符串的第一个引号之前加上r,可以将该字符串标记为原始字符串,它不包括转义符。

因为正则表达式常常使用反斜杠,所以向re.compile()函数传入原始字符串,使用"r"是非常方便的,而不是输入额外的反斜杠。输入r’\d\d\d-\d\d\d-\d\d\d\d’要比输入’\d\d\d-\d\d\d-\d\d\d\d’更容易,而且不容易出错。

你可能感兴趣的:(Python,Python进阶之路,Python,正则表达式的创建与匹配,教程)