Python 高级,正则表达式 方法进阶,(小白必备)

欢迎访问个人博客http://www.jkraise.top

正则表达式


# 导入re 模块
import re   

# 2. 使用match方法进行匹配操作

result = re.match(表达式,  字符串 )

# 如果匹配不到  返回None,  匹配到, 返回Match对象
print(result)

# 如果上一个步匹配到数据的话, 可以使用group 方法提取数据
print(result.group())

匹配单个字符
import re

# 匹配 任意字符 (除了\n)
ret = re.match("t.o", "too")
print(ret.group())      # too

ret = re.match("t.o", "two")
print(ret.group())      # two

# 匹配 [ ] 中列举的字符
ret = re.match("[hH]", "hello Python")
print(ret.group())      # h

ret = re.match("[hH]ello Python", "hello Python")
print(ret.group())      # hello Python

# 匹配 \d   数字 即 0-9


# 匹配 \D  匹配 非数字  , 即不是数字
# 匹配 \s  匹配空白,  及空格 , tab键
# 匹配 \S  匹配 非空白
# 匹配 \w  匹配 单词字符  即 a-z. A-Z, 0-9
# 匹配 \W 匹配 非单词字符


匹配多个字符
# 字符 *   匹配前一个字符出现0次或者无限次, 即可有可无

# 字符 +   匹配前一个字符出现1次或者无限次, 即至少有一次

#字符 ?   匹配前一个字符出现0次或者1次, 即要么有1次, 要么没有

# 字符 {m}   匹配前一个字符出现m次, 

#字符 {m,n}  匹配前一个字符出现m次到n次, 




# 开头 ^  结尾 $
email_list =["xiaoWang@163.com","xiaoWang@163.comheihei", ".com.xiaowang@qq.com"] 

for email in email_list: 
    ret = re.match("[\w]{4,20}@163\.com$", email) 
    if ret: 
        print("%s 是符合规定的邮件地址,匹配后的结果是:%s" % (email, ret.group())) 
    else: 
        print("%s 不符合要求" % email)
        
        
 # match 默认以 以开头匹配 所以不用加 ^      
匹配分组
import re

# 字符 |  匹配左右 两侧 一个

ret = re.match("[1-9]?\d$|100", "100")
if ret:
    pritn(ret.group())
    
    
# 字符 (a|b)  匹配小括号
ret = re.match("\w[4,20]@(163|126|qq)\.com$", "test@qq.com")
if ret:
    pritn(ret.group())
    
    
# 正则转义  加r  进行转义
ret = re.match(r"\w[4,20]@(163|126|qq)\.com$", "test@qq.com")
if ret:
    pritn(ret.group())
    
    

# 通过引用分组中匹配到的数据即可,但是要注意是元字符串,即类似 r""这种格式

# </\1> == ([a-zA-Z]*)
ret = re.match(r"<([a-zA-Z]*)>\w*</\1>", "<html>hh</html>")
print(ret.group())    




import re

ret = re.match(r&quot;&lt;(P&lt;name1&gt;\w*)&gt;&lt;(?P&lt;name2&gt;\w*)&gt;.*&lt;/(?P=name2)&gt;&lt;/(?P=name1)&gt;&quot;, &quot;&lt;html&gt;&lt;h1&gt;www.itcast.cn&lt;/h1&gt;&lt;/html&gt;&quot;)


# 起了个别名 
# (?P<name>\w*)  给\w*匹配的内容   起了个别名 name
print(ret.group())
print(ret.group('name1'))  # 获取name1的匹配结果
print(ret.group('name2'))  # 获取name2的匹配结果

# 打印结果
# html
# h1

高级用法
#  search
import re
ret = re.search(r"\d+", "阅读次数为9999还是9998?")
print(ret.group())   # 9999

# search  在整个字符中搜索  返回匹配的第一个
# match 和search 不同在  match 默认是匹配开头


# findall
ret = re.findall(r"\d+", "python = 9999, c=7899, c++ = 3456")
print(ret)   # 返回 的是一个列表 


# sub

import re ret = re.sub(r"\d+", '998', "python = 997") print(ret)   # Python = 998

# 参1  规则
# 参2  替换的字符串
# 参数3   原字符串
# 参数4   匹配个数

# 进行 加1
# 设置 函数 

def add(match):
    # 1 获取匹配的 数据      返回的是 match 对象
    num = match.group()
    
    # 数据 + 1  进行强转
    num = int(num) + 1
    
    # 返回的也是字符串
    return str(num)
    
 ret = re.sub(r"\d+", add, "python = 997")
 print(ret)   # Python = 998


# 取 反 ^  语法: [^规则]

# 贪婪模式  
s = "this is a number 234-235-22-123"
ret = re.match(r"(.+)(\d+-\d+-\d+-\d+))
print(ret.group())

# 非贪婪模式   +?
ret = re.match(r"(.+?)(\d+-\d+-\d+-\d+))
print(ret.group())
print(ret.group(1))     # this is a number
print(ret.group(2))     # 234-235-22-123


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值