Python学习----------正则表达式

本文深入解析了正则表达式的各种元字符及其功能,包括^、$、.、、w、W、s、S、d、D,以及特殊模式如|、()、(?:...)、(?#...)、(?=...)、(?<=...)、(?<!...)等。同时,介绍了如何使用Python的re模块进行邮件地址验证、字符串匹配、搜索、替换和切割等高级操作。

元字符总结:

正则表达式常用的元字符有^,$, . , \b ,\w, \W, \s , \S, \d, \D,各自的功能如下

^:匹配行的开始位置

$ : 匹配行的结束位置

\b : 匹配单词的开始或者结束位置

. 匹配除换行符之外的任意字符

\w :匹配单词字符(包括字母,数字,下划线和汉字)

\W : 匹配任意非单词字符(包括字母,数字,下划线和汉字)

\s : 匹配任意的空白字符,如空格,制表符,换行符

\S : 匹配任意的非空白字符

\d : 匹配任意的数字

\D : 匹配任意的非数字

| :或者的意思

():在这里里面选择

(?:\w+\.)*  以句点作为结尾的字符串,例如“google.”、“twitter.”、“facebook.”,但是这些匹配不会保存下来 供后续的使用和数据检索

(?#comment)     此处并不做匹配,只是作为注释

(?=.com)   如果一个字符串后面跟着“.com”才做匹配操作,并不使用任何目标字符串

(?!.net)     如果一个字符串后面不是跟着“.net”才做匹配操作

(?<=800-)  如果字符串之前为“800-”才做匹配,假定为电话号码,同样,并不使用任何输入字符串

(?<!192\.168\.)如果一个字符串之前不是“192.168.”才做匹配操作,假定过滤掉一组C类IP地址

(?(1)y|x)  如果一个匹配组 1(\1)存在,就与 y 匹配;否则,就与 x 匹配

注意:(?=XXX)表示结尾要是什么才匹配(?!xxx)表示结尾不是什么才匹配

(?<=XXX)表示需要匹配的字符串之前需要是XXX

(?<!XXX)表示需要匹配的字符串之前不能为XXX才匹配

匹配邮箱:

import re
while True:
    var =
input("输入你的邮箱地址:")
    result = re.match(
r"^[0-9a-zA-Z_]{4,20}@(163|126|q{2}|outlook)\.com$",var)# |表示选择,()表示限定
   
print(result)
   
if result:
        list =  result.group()
       
print(list,"是正常的邮箱地址")
   
else:
       
print(var, "不是正常的邮箱地址")

 

group函数表示取()中的内容那一部分。是分组函数

import re
while True:
    var =
input("输入你的邮箱地址:")
    result = re.match(
r"^([0-9a-zA-Z_]{4,20})@(163|126|q{2}|outlook)\.com$",var)
   
print(result)
   
if result:
       
list1 = result.group(1)
        list =  result.group()
       
list2 = result.group(2)
        print(list,"是正常的邮箱地址")
       
print("第一部分内容是:",list1)
        
print("第二部分内容是:",list2)
   
else:
       
print(var, "不是正常的邮箱地址")

输入你的邮箱地址:261781wyw_@163.com

<re.Match object; span=(0, 18), match='261781wyw_@163.com'>

261781wyw_@163.com 是正常的邮箱地址

第一部分内容是: 261781wyw_

第二部分内容是: 163

 

注意:正则表达式中如果需要前后对应可以使用group函数要配对的用括号括起来后面用\1配对即可

import re
html_str =
"<h1>hahxieu</h1>"
result = re.match(r"<(\w*)>.*</\1>",html_str)
list = result.group()

print(list)

 

限定符:

{n} 重复n次

{n,} 重复至少n次

{n,m} 重复n到m次

*重复至少0次

+ 至少重复一次

?重复0次或者1次

*?尽可能少得使用重复的第一个匹配

+? 尽可能少的使用重复但至少使用一次

?? 使用零次重复或者一次重复

{N}? 等同于{n}

{n,} ? 尽可能少地使用重复,但至少使用n次

{n,m}?介于n 次和m次之间,尽可能少的使用重复

 

 

Python中 re模块的高级用法:

 

Search:匹配出文章的阅读次数

import re

ret = re.search(r"\d+","阅读次数 9999")

print(ret.group())
9999

findall 统计出pythoncc++相应文章阅读的次数

ret1 = re.findall(r"\d+","python = 9999,c=9282, c++= 9282")
print(ret1)

['9999', '9282', '9282']

 

 sub将返回的数据进行替换

re2 = re.sub(r"\d+","872","python =221, c= 2929")
print(re2)

python =872, c= 872

split 根据匹配进行切割字符串,并返回一个列表

re3 = re.split(r":| ","information:I will come to you")
print(re3)

['information', 'I', 'will', 'come', 'to', 'you']

 

常用字符转义:

\a 响铃

\b 在正则表达式中表示单词的边界

\t 制表符\u0009

\r 回车符\u000D

\v 垂直制表符

\f 换页符

\n 换行符

\e 回退(ESC)

\040 将ASCII 字符匹配为八进制数

\x20 使用16进制表示,形式与ASCII字符匹配

\cC ASCII控制字符

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值