python——正则表达式

一.单字符匹配

1."\d":匹配数字0-9

import re
print(re.match("速度与激情\d", "速度与激情1").group())

在这里插入图片描述
2."\D":匹配非数字

import re
print(re.match("速度与激情\D", "速度与激情*").group())
print(re.match("速度与激情\D", "速度与激情a").group())

在这里插入图片描述
3."[]":匹配[]中举例的字符

import re
print(re.match("速度与激情[12345678]", "速度与激情2").group())
print(re.match("速度与激情[1-8]", "速度与激情3").group())
print(re.match("速度与激情[1-36-8]", "速度与激情6").group())
print(re.match("速度与激情[1-3a-dC-H]", "速度与激情D").group())

在这里插入图片描述
4.\s":匹配空白符,即空格,tab键

import re
print(re.match("速度与激情\s", "速度与激情 ").group())
print(re.match("速度与激情\s", "速度与激情\t").group())

在这里插入图片描述
5."\S":匹配非空白

import re
print(re.match("速度与激情\S", "速度与激情二").group())
print(re.match("速度与激情\S", "速度与激情!").group())
print(re.match("速度与激情\S", "速度与激情8").group())
print(re.match("速度与激情\S", "速度与激情A").group())

在这里插入图片描述
6."\w":匹配单词字符,即a-z,A-Z,0-9,_

    import re
    print(re.match("速度与激情\w", "速度与激情A").group())
    print(re.match("速度与激情\w", "速度与激情8").group())
    print(re.match("速度与激情\w", "速度与激情_").group())

在这里插入图片描述
7."\W":匹配非单词字符

import re
print(re.match("速度与激情\W", "速度与激情?").group()) 
print(re.match("速度与激情\W", "速度与激情 ").group())

在这里插入图片描述
8. “.”:匹配任意一个字符,除了\n

import re
print(re.match("速度与激情.", "速度与激情_").group())
print(re.match("速度与激情.", "速度与激情6").group())
print(re.match("速度与激情.", "速度与激情f").group())
print(re.match("速度与激情.", "速度与激情&").group())
print(re.match("速度与激情.", "速度与激情三").group())

在这里插入图片描述

二.多字符匹配

1."{m}":匹配前一个字符出现m次

import re
print(re.match(r"\d{4}", "1111").group())
print(re.match(r"苹果\d{3}", "苹果222").group())

在这里插入图片描述

2."{m.n}":匹配前一个字符出现m次到n次

import re
print(re.match(r"\d{1,5}", "11111").group())
print(re.match(r"\d{1,5}", "222").group())

在这里插入图片描述
3."?":匹配前一个字符出现1次或者0次

import re
print(re.match(r"\d{3,4}-?\d{8}", "000-12345678").group())
print(re.match(r"\d{3,4}-?\d{8}", "00012345678").group())

在这里插入图片描述

4."+":匹配前一个字符出现1次或者一次以上

import re
print(re.match(r".+", "a").group())
print(re.match(r".+", "asdfghj").group())

在这里插入图片描述
5."*":匹配前一个字符可有可无

import re
content = """hello
world
redhat"""
print(re.match(r".*", content).group())  # "."不匹配\n
print()
print(re.match(r".*", content,re.S).group())

在这里插入图片描述

三.匹配开头结尾

字符功能
^匹配字符串开头
$匹配字符串结尾

1.匹配出变量名是否有效
import re

names=["name1","_name","2_name","__name__","_name!"]

for name in names:
    ret = re.match("^[a-zA-Z_][a-zA-Z_0-9]*$",name)
    if ret:
        print("变量名 %s符合要求" % name)
    else:
        print("变量名 %s不合法" % name)

在这里插入图片描述

2.匹配163邮箱地址
匹配出163的邮箱地址,且@之前有4-20位,例如hello@163.com

import re


def main():
    email_addr = input("请输入邮箱地址:")
    ret = re.match("[a-zA-Z_0-9]{4,20}@163\.com$", email_addr)  # 特殊符号需要转义
    if ret:
        print("%s 是正确的邮箱地址" % ret.group())
    else:
        print("%s不符合要求" % ret.group())


if __name__ == '__main__':
    main()

在这里插入图片描述

四.匹配分组

字符功能
|匹配左右任意一个表达式
(ab)将括号中字符作为一个分组
\num引用分组num匹配到的字符串
(?P<name>)分组起别名
(?P=name)引用别名为name分组匹配到的字符串

1. 应用|和()

   import re
   ret = re.match("([a-zA-Z_0-9]{4,20})@(163|126)\.com$", "123456@163.com")  # 一个“()”分为一组,最后一组可以不用“()”
   print(ret.group())
   print(ret.group(1))
   print(ret.group(2))

在这里插入图片描述
2.引用分组num匹配到的字符串

import re
ret = re.match(r"<(\w*)>.*</\1>","<h1>hello</h1>")
print(ret.group())
print()
ret = re.match(r"<(\w*)><(\w*)>.*</\2></\1>","<body><h1>hello</h1></body>")
print(ret.group())

在这里插入图片描述
3.分组别名的应用

import re
ret = re.match(r"<(?P<p1>\w*)><(?P<p2>\w*)>.*</(?P=p2)></(?P=p1)>","<body><h1>hello</h1></body>")
print(ret.group())

在这里插入图片描述

五.re模块的高级用法

1.search不会从头匹配

import re
ret = re.search(r"\d+","阅读量:9999")  # 不会从头匹配
print(ret.group())

在这里插入图片描述
2.findall匹配所有数字

import re  
ret = re.findall(r"\d+","python = 9999, c = 7890, c++ = 1234")  # 匹配所有数字
print(ret)

在这里插入图片描述

3.sub将匹配到的数据进行替换

(1):

import re 
ret = re.sub(r"\d+","1111","python = 9999,c = 1024")  # 替换所有匹配的数字
print(ret)

在这里插入图片描述
(2):

import re


def add(temp):
    strNum = temp.group()
    num = int(strNum) + 1
    return str(num)


ret = re.sub(r"\d+",add, "python = 997")
print(ret)
ret = re.sub(r"\d+",add, "python = 99")
print(ret)

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值