Python速成笔记——进阶(模式匹配与正则表达式)

正则表达式可以节约大量时间,知道正则表达式就可能意味着本来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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梦想家LEI

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值