Python 正则表达式之综合运用

运用一:已知字符串a=“aAsmr3idd4bgs7Dlsf9eAF”

(1)请将a字符串中的数字取出,并输出为一个新的字符串,要求使用正则表达式完成;

(2)请将字符串a中的大写字母换为小写,小写字母换成大写。

import re
a="aAsmr3idd4bgs7Dlsf9eAF"
lst=re.compile(r'\d+')
st=lst.findall(a)
st1=''.join(i for i in st)
print(st1)

result = re.sub(r'[a-zA-Z]', lambda x: x.group(0).upper() if x.group(0).islower() else x.group(0).lower(), a)
print(result)

第一小问中规中矩,只要求匹配数字。第二个小问难就难在大小写转换,这里可以灵活运用关键字:lambda,lambda 函数通常会作为参数传递给高阶函数,例如 map()filter()reduce() 等函数,用于对序列进行转换、筛选、累积等操作。

lambda arguments: expression

arguments是函数的参数列表,用逗号分隔;experession是函数的返回值,也是一个表达式。

result = re.sub(r'[a-zA-Z]', lambda x: x.group(0).upper() if x.group(0).islower() else x.group(0).lower(), a)

其中这句代码的含义就是将正则匹配的内容进行判断,如果是大写,则转变为小写,如果是小写,则转便为大写。

运用二:根据下列字符串构成规律写出正则表达式,实现对测试字符串的搜索。假设待搜索字符串为:小明的身份证号码是 1234567890111,手机号码是 13508826666,私人邮箱是 dailCM@outlook.com,公司邮箱是 123456@qq.com (1)从字符串中提取合法的18位身份证号码;(2)从字符串中提取合法的E-mail地址;(3)从字符串中提取合法的11位手机号码。

我们先分析要匹配的字符串,先分析身份证号码。总共由18位数字构成,前6位表示地区的特别号码,第7、8、9、10位为年份,且7、8位应为19或者20(因为有身份证的人都是19多少年或者20多少年),第11、12位表示月份,则11与12位数字构成的月份只能在01-12之间。第13,14位表示日期,则两位数必须小于31。15、16、17表示任意的3位数字,18位数必须是数字或者字母x。

根据分析就可以开始构造正则表达式:

r'\b[1-9]\d{5}(19|20)\d{2}(0\d|1[0-2])([0-2]\d|3[0-1])\d{3}[0-9X]\b'

接着分析邮箱地址。首先邮箱地址如291434658@qq.com,由5部分组成,在 "@" 符号之前可以是任意的数字或者字母组成的字符串和下划线等字符,可用[a-zA-Z0-9._%+-]表示,接着就是符号 "@" ,然后邮箱的域名部分,可以由英文字母、数字、点、减号组成,且至少包含一个字符。接着就是符号 "." ,可用"\."来进行匹配,最后是邮箱的顶级域名,分为com或cn等,至少有两个字母组成,可用 "[a-zA-Z]{2,}" 匹配

根据分析构造表达式:

r'\b[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}\b

电话号码不多说,特别基础,如果电话号码弄不来的同学建议再回去看下知识点。

编写程序:

import re
lst='小明的身份证号码是 25364720210604002X,手机号码是 13508826666,私人邮箱是 dailCM@outlook.com,公司邮箱是 123456@qq.com'
id_pattern = r'\b[1-9]\d{5}(19|20)\d{2}(0\d|1[0-2])([0-2]\d|3[0-1])\d{3}[0-9X]\b'
id_match = re.search(id_pattern, lst)
if id_match:
    print("身份证号码:", id_match.group())
else:
    print("未找到身份证号码")

email_pattern = r'\b[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}\b'
email_match = re.search(email_pattern, lst)
if email_match:
    print("E-mail 地址:", email_match.group())
else:
    print("未找到 E-mail 地址")

phone_pattern = r'\b1[3-9]\d{9}\b'
phone_match = re.search(phone_pattern, lst)
if phone_match:
    print("电话号码:", phone_match.group())
else:
    print("未找到电话号码")

运行结果:

这样正则表达式的运用就结束啦。 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Saber12_3_4

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

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

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

打赏作者

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

抵扣说明:

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

余额充值