Python中使用正则表达式的实例(第4节)


在日常生活中,我们经常会遇到设置密码的问题,系统需要判断我们设置的密码是否符合规定的要求;在用邮件地址注册账号会员时,系统会检查电子邮件地址的有效性;在微信聊天时,我们经常需要在聊天记录中寻找某些关键词;在文档处理时,我们经常需要一次性搜索和替换符合某种特征的特定语句,显然,如果用人工寻找会浪费大量的时间,学会使用正则表达式可以极大提高文本处理的效率。

1、验证电子邮件地址

使用Python正则表达式进行电子邮件地址验证是一项很常见的任务。例如:

动手练一练:

import re

def is_email(email):
    p = r"^[a-zA-Z0-9]+@[a-zA-Z0-9]+\.[a-zA-Z]{2,}$"
    if re.match(p, email):
        print("合法的邮件地址")
    else:
        print("无效的邮件地址")

is_email("py@example.com") # 合法的邮件地址
is_email("py@example") # 无效的邮件地址
is_email("@example.com") # 无效的邮件地址
is_email("pyexample.com") # 无效的邮件地址
is_email("py@example.c") # 无效的邮件地址

执行以上代码,输出结果为:

合法的邮件地址
无效的邮件地址
无效的邮件地址
无效的邮件地址
无效的邮件地址

2、从字符串中提取数据

要从长字符串中找到一些特殊字符,最直接的想法是使用for循环遍历所有字符并找到所需的内容。但是,没有必要使用任何循环,正则表达式就能简单实现。例如:

动手练一练:

import re

#1、单字符匹配获取字符串中所有颜色和数字
s="""
1号张三衣服是白色的
2号李四衣服是黑色的
3号王五衣服是红色的
4号赵六衣服是蓝色的
"""
p=re.compile(r".色")
result=p.findall(s)
print(result)

p=re.compile(r"\d")
result=p.findall(s)
print(result)

执行以上代码,输出结果为:

['白色', '黑色', '红色', '蓝色']
['1', '2', '3', '4']

3、验证固定电话号码和手机号码

手机号码和固定电话号码的正则表达式可以根据不同的格式进行匹配,例如:

动手练一练:

import re

# 正则表达式用于匹配固定电话号码
a = r'^(\d{3,4}-)?\d{6,8}$'

# 正则表达式用于匹配手机号码
b = r'^1[3-9]\d{9}$'

# 示例电话号码
t1 = "020-12345678"
t2 = "18888888888"

# 检查固定电话号码是否匹配
if re.match(a, t1):
    print(f"{t1}是有效的固定电话号码。")
else:
    print(f"{t1}不是有效的固定电话号码。")

# 检查手机号码是否匹配
if re.match(b, t2):
    print(f"{t2}是有效的手机号码。")
else:
    print(f"{t2}不是有效的手机号码。")

执行以上代码,输出结果为:

020-12345678是有效的固定电话号码
18888888888是有效的手机号码

4、正则表达式检测给定的URL地址是否合法

动手练一练:

import re

p = re.compile(r'^(http:\/\/|https:\/\/)?[a-zA-Z0-9.-]+\.([a-z.]{2,6})([\/\w .-])\/?$')
def is_url(url):
    if p.match(url):
        print("这是一个合法的url:", url)
    else:
        print("这不是一个有效的url:", url)

is_url("https://www.pyhint.com")
is_url("www.pyhint.com")
is_url("pyhint.com")
is_url("pyhint")
is_url("E:\Pyhint\condition")
is_url("py@example.com")

执行以上代码,输出结果为:

这是一个合法的url https://www.pyhint.com
这是一个合法的url www.pyhint.com
这是一个合法的url pyhint.com
这不是一个有效的url pyhint
这不是一个有效的url E:\Pyhint\condition
这不是一个有效的url py@example.com

5、使用正则表达式验证身份证号码

身份证号码作为一种比较常见的个人信息,在数据处理中经常被用到。使用正则表达式可以方便地提取身份证号码,并且还能对其进行一定的验证。身份证号码是由18位数字组成的,包含了身份证号码中的地区、出生年月日和校验码等信息。例如:

动手练一练:

import re

p = re.compile(r'^[1-9]\d{5}(18|19|20)?\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])\d{3}(\d|[Xx])$')
def is_id(n):
    if p.match(n):
        print("身份证号码匹配:", n)
    else:
        print("身份证号码不匹配:", n)

is_id("34567820880818088X")
is_id("www.pyhint.com")
is_id("18888888888")
is_id("pyhint")
is_id("020-12345678")

执行以上代码,输出结果为:

身份证号码匹配 34567820880818088X
身份证号码不匹配 www.pyhint.com
身份证号码不匹配 18888888888
身份证号码不匹配 pyhint
身份证号码不匹配 020-12345678

6、验证用户名是否合法

在Python中,可以使用正则表达式验证账号是否合法。以下是一个简单的示例,假设账号需要以字母开头,并且可以包含字母、数字和下划线,允许6-10个字母:

动手练一练:

import re

p = re.compile(r'^[a-zA-Z][a-zA-Z0-9_]{5,9}$')
def is_uer(u):
    if p.search(u):
        print("这是一个有效的账号:", u)
    else:
        print("这不是一个有效的账号:", u)

is_uer("a34567")
is_uer("188888")
is_uer("pyhint.com")

执行以上代码,输出结果为:

这是一个有效的账号 a34567
这不是一个有效的账号 188888
这不是一个有效的账号 pyhint.com