Python学习第八章 正则表达式


# ========================程序开始============
# python 从入门到精通(第二版)
# 第八章 Python中使用正则表达式
# 语法
#  行定位符 ^行的开头 $行的结尾
#  元字符 .换行符以外的任意字符 \w字母数字下划线汉字 \s任意空白字符 \d数字 \b单词开始或结束
#  限定符 ?匹配前面字符串0次或1次 +一次或多次 *零次或多次 {n}n次 {n,}最少n次 {n,m}最少n次,最多m次
#  字符类  [a-z0-9A-Z]  [aeiou]  [\u4e00-\u9fa5]+ 匹配多个连续汉字
#  选择字符 | 身份证验证 (^\d{15}$)|(^\d{17}(\d|x|X)$
#  排除字符 ^ [^a-zA-Z] 匹配一个非字母的字符
#  转移字符 \  有效IP地址表达式  ((^[1-9]$)|(^[1-9][0-9]$)|(^[1,2][0-9][0-9]$))(\.([0-9]{3})){3}
#  分组 ()
#  原生字符串 r R
import re

# 8.3 实践练习 替换出现的违禁词
str_83 = "网上销售平台天猫卖书平台当当广告中不能出现唯一夸张性修饰神效也不能用"
pattern_83 = r"天猫|当当|神效|唯一"
str_83_1 = re.sub(pattern_83, "@_@", str_83)
print('违禁词用@_@替换后的字符串:', str_83_1)  # 违禁词用@_@替换后的字符串: 网上销售平台@_@卖书平台@_@广告中不能出现@_@夸张性修饰@_@也不能用

# 8.3 实践练习 提取文本中email地址
str_83_email = "映雪的email是yinxue@sohu.com 宏飞的email是hongfei@smartZj.net  王五的邮箱是398934@198.2.6.7 gates@Microsoft.COM"
pattern_email = r"(([a-zA-Z0-9])+\@\w+(\.\w*)+)"
result_email = re.finditer(pattern_email, str_83_email, re.I)
print(type(result_email))
for item in result_email:
    print(item.group())
# 教材提供的答案
pattern = re.compile(r'([A-Za-z0-9_\-\.])+@([A-Za-z0-9_\-\.])+.([A-Za-z]{2,4})')
search = pattern.finditer('明日科技:mingrisoft@mingrisoft.com 琦琦:84978981@qq.com '
                          '无语:123456789@163.com 可可:987654321@192.168.1.66.com')
for item in search:
    print(item.group())

#  教材中的典型应用
print(re.match(r'mr_\w+', 'MR_Shop mr_shop', re.I))
pattern = r'(13[4-9]\d{7})'
pattern2 = r'(13[4-9]\d{7}$)'
print(re.match(pattern, '1385291009998888'))  # <re.Match object; span=(0, 10), match='1385291009'>
print(re.match(pattern2, '1385291009998888'))  # None
print(re.search(pattern, '889991385291009998'))  # <re.Match object; span=(5, 15), match='1385291009'>

patter_ip_1 = r'([1-9]{1,3}(\.[0-9]{1,3}){3})'
patter_ip = r'(([1-9]|[1-9][0-9]|[1][0-9][0-9]|[2][0-5][0-5])(\.([0-9]|[1-9][0-9]|[1][0-9][0-9]|[2][0-5][0-5])){3})'
# bug 2256.3.4.5会被识别为56.3.4.5
str_ip = '127.000.0.1 192.168.01.08 300.0.8.9 255.66.277.0 2256.3.4.5 192.05.6.7 10.1.2.7 500.1.2.3'
result_ip = re.findall(patter_ip, str_ip)
print(result_ip)
for item in result_ip:
    print(item[0])

# 正则表达式替换指定字符
str1 = '@明日科技  @扎克伯格 @盖茨    @yinxue'
pattern = r'\s*@'
list1 = re.split(pattern, str1)
for item in list1:
    print(item)
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值