python进阶第五课(正则表达式)

正则表达式的基本使用

#coding=utf-8

# 导入re模块
import re

# 使用match方法进行匹配操作
result = re.match(正则表达式, 要匹配的字符串)

# 如果上一步匹配到数据的话, 可以使用group方法来提取数据
result.group()
>>> import re
>>> re.match(r"hello", "hello world")
<re.Match object; span=(0, 5), match='hello'>
>>> 

匹配单个和多个字符

import re

# 匹配一个数字
r1 = re.match(r"速度与激情\d", "速度与激情2")
# 取出匹配的数据
print(r1.group())  # 速度与激情2
# 匹配数字,小写字母,大写字母
r2 = re.match(r"速度与激情[1-8,a-z,A-Z]", "速度与激情8").group()
print(r2)
# 匹配单词字符, 即a-z,A-Z,0-9,_  , 包括中文
r3 = re.match(r"速度与激情\w", "速度与激情哈").group()
print(r3)
# 匹配空白字符
r4 = re.match(r"速度与激情\s", "速度与激情 ").group()
print(r4)
# 匹配任意字符
r5 = re.match(r"速度与激情.", "速度与激情2").group()
print(r5)
# 匹配多个字符  {1,2}表示前面的\d有一位或者两位, {m,n}表示前一个字符出现从m到n次
r6 = re.match(r"速度与激情\d{1,2}", "速度与激情22").group()
print(r6)
# ?表示?前面的有一位或者没有
r7 = re.match(r"021-?\d{8}", "021-12345678").group()
print(r7)
# .匹配任意字符, 除了\n
html_content = """asd
sdd"""
r8 = re.match(r".*", html_content).group()
print(r8)  # asd
# 加上re.S , 匹配\n
r9 = re.match(r".*", html_content, re.S).group()
print(r9)
# *表示前一个字符出现0次或多次
r10 = re.match(r".*", "").group()
print(r10)
# +表示前一个字符出现1次或多次
r11 = re.match(r".+", "1").group()
print(r11)

判断变量名是否有效

import re
# 判断变量名是否有效
names = ["name", "name1", "name_", "_name", "1name"]
for name in names:
    # ^匹配开头, $匹配结尾
    r1 = re.match(r"^[a-zA-Z_][a-zA-Z0-9_]*$", name).group()
    print(r1)

匹配163邮箱

import re
# 匹配163邮箱地址
email = input("请输入邮箱地址:")
try:
    r1 = re.match(r"[a-zA-Z0-9_]{4,20}@163\.com$", email).group()
    print(r1)
except:
    print("不符合要求")

匹配163或者126邮箱

import re
# 匹配163和126邮箱地址, |表示126或者163,需要括号括起来
r1 = re.match(r"[a-zA-Z0-9_]{4,20}@(163|126)\.com$", "laowang@126.com")
# 取出括号里面的数据
r = r1.group(1)
print(r)
if r1:
    print("%s符合要求" % r1.group())
else:
    print("不符合要求")

re的高级用法

  • search的用法
import re
# match和search的区别:
# match从头开始匹配, search不会从头开始匹配,只要有匹配的数据就可以
r1 = re.search(r"\d+", "python666").group()
print(r1)  # 666
import re
# match和search的区别:
# match从头开始匹配, search不会从头开始匹配,只要有匹配的数据就可以
# search匹配第一次出现的数据
r1 = re.search(r"\d+", "python666, java888").group()
print(r1)  # 666

  • findall的用法
# findall匹配所有匹配的数据, findall返回的是列表
r2 = re.findall(r"\d+", "python666, java888")
print(r2)
  • sub的用法
# sub替换匹配到的所有数据, 并返回这个字符串
r3 = re.sub(r"\d+", "888", "python666")
print(r3)
# sub中间的一部分支持放参数的引用
def add(temp):
    strNum = temp.group()
    strNum = int(strNum) + 1
    return str(strNum)
r4 = re.sub(r"\d+", add, "python666")
print(r4)
  • split切割字符串
# split根据匹配进行切割字符串, 返回一个列表
ret = re.split(r":| ", "info:xiao 33")
print(ret)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值