正则表达式可以节约大量时间,知道正则表达式就可能意味着本来3000步才能解决的问题现在只需要用3步。
号码检索程序(不使用正则表达式)
假设你需要验证一组电话号码,号码模式如:456-888-321,我们设计一个isPhonenumber()的函数确定输入的文本是否与电话号码的格式匹配,由此查找出文本中的号码。
def isPhoneNumber(text_input):
if len(text_input) != 11:# 验证号码长度是否符合
return False
for i in range(0,3):# 验证第1组字符是否为数字
if not text_input[i].isdecimal():
return False
if text_input[3] != "-":# 验证第4个字符是否为'-'
return False
for i in range(4,7):# 验证第2组字符是否为数字
if not text_input[i].isdecimal():
return False
if text_input[7] != "-":# 验证第8个字符是否为'-'
return False
for i in range(8,11):# 验证第3组字符是否为数字
if not text_input[i].isdecimal():
return False
return True #验证成功
# 待检索信息
message = 'Please call me at 456-888-321 tomorrow. my office is 465-999-100.'
for i in range(len(message)):
text_chunk = message[i:i+11]
if isPhoneNumber(text_chunk): #输出匹配的电话号码
print('phone number is found: ' + text_chunk)
# @梦想家LEI 2024.10.05
输出结果:
phone number is found: 456-888-321
phone number is found: 465-999-100
>>>
虽然这个号码检索程序能够进行工作,但它能做的十分有限,只能检索一种模式的号码,如果要添加其他检索信息就需要增加更多的代码,而如果使用正则表达式会更简单。
正则表达式
正则表达式简称为"regex",是一种文本的描述方法,例如\d 是一个正则表达式,表示任意一位数字字符。456-888-321 可以用\d\d\d-\d\d\d-\d\d\d表示,也可以用\d{3}-\d{3}-\d{3}表示,添加{N}表示匹配一个模式N次
创建正则表达式
Python 所有正则表达的函数都在re模块中,re.complie()传入一个字符串,将返回一个Regex对象。
import re
phonr_regex = re.compile(r'\d{3}-\d{3}-\d{3}') #创建一个正则表达式
匹配Regex对象
search()方法用于查找输入的字符串,寻找匹配正则表达式的所有匹配,无匹配值时返回None,有匹配值时将返回一个Match对象。Match对象中有一个group()方法,返回被查找字符实际匹配的文本。
message = 'My phone number is 456-888-321.'
regex_match = phone_regex.search(message) #查找字符串
print('Pho