正则表达式基础

正则表达式:原子

推荐一个正则表达式测试网站: https://alf.nu/RegexGolf#accesstoken=xDpssJbZsLtvWCZGOppl
原子是正则表达式中最基本的组成单位,每个正则表达式中至少要包含一个原子。常见的原子有:
a普通字符作为原子
b非打印字符作为原子
c通用字符作为原子
d原子表

代码实战

import re
string = "taoyunjiaoyu"

#普通字符作为原子
pat = "yun"
rst = re.search(pat, string)
print(rst)

#非打印字符作为原子
#\n 换行符  \t  制表符
string = '''taoyunjiaoyun
baidu
'''
pat = “\n”
rst = re.search(pat, string)
print(rst)

#通用字符作为原子
'''
\w  匹配任意字母、数字、下划线
\W 匹配除字母、数字、下划线外的任意一个字符
\d  匹配十进制数字
\D 匹配除十进制数字以外的任意一个字符
\s  匹配空白字符
\S 匹配除空白字符以外的任意一个字符
'''
string = "taoyunji87362387aoyun"
pat = “\w\d\d”
rst = re.search(pat, string)
print(rst)

#原子表
#通常是用[]表示,在[xyz]中任意选择一个。在[]中^是非的意思,[^xyz]就是除xyz外
string = "taoyunji87362387aoyun"
pat = “tao[xyz]un”
rst = re.search(pat, string)
print(rst)

正则表达式:元字符

所谓的元字符,就是正则表达式中具有一些特殊含义的字符,比如重复N次前面的字符等。

代码实战

#元字符
'''
.  匹配除换行符外任意一个字符
^  匹配开始位置
$  匹配结束位置
*  0\1\多次
?  0\1次
+  0\1\多次
{n} 恰好n次
{n,} 至少n次
{n, m}  至少n次,至多m次
|  模式选择符或
()  模式单元
'''
import re

string = "taoyunnnnji87362387aoyun"
pat = "tao.un" #提取出taoyun
pat = "^ao..." #提取不出来,没有以ao开头的字符串
pat = "^tao..." #提取出taoyun
pat = "tao...$" #提取不出来,不是以n结尾的字符串
pat = "bai..&" #提取出baidu
pat = "tao*" #提取出tao
pat = "tao.*" #提取出所有
pat = "taoyun+" #提取出taoyunnnn
pat = "yun{4}"  #提取出yunnnn,如果数字换成5输出none,换成3输出yunnn
rst = re.search(pat, string)
print(rst)

正则表达式:模式修正符

所谓模式修正符,即可以在不改变正则表达式的情况下,通过模式修正符改变正则表达式的含义,从而实现一些匹配结果的调整等功能

代码实战

import re
#模式修正符
'''
| 匹配时忽略大小写(重点)
M 多行匹配(重点)
L 本地化识别匹配
U Unicode
S 让.匹配包括换行符(重点)
'''
string = "Python"
pat = "pyt"
rst = re.search(pat, string) #有大小写区别匹配不出来
rst = re.search(pat, string, re.|) #忽略大小写
print(rst)

正则表达式:贪婪模式与懒惰模式

贪婪模式的核心点就是尽可能多的匹配,而懒惰模式的核心点就是尽可能少的匹配

代码实战

#贪婪模式与懒惰模式
import re
string = "poythony"
pat1 = "p.*y" #默认是贪婪模式(模糊)
pat2 = "p.*?y" #加一个问号懒惰模式(精准)
rst1 = re.search(pst1, string, re.|) #提取出poythony
rst2 = re.search(pst2, string, re.|) #提取出poy
print(rst1)
print(rst2)

正则表达式函数

正则表达式函数有re.match()函数、re.search()函数、全局匹配函数、re.sub()函数。

代码实战

#正则表达式函数
#1、match 
string = "poythonyhjskjsa"
pat1 = "p.*y"
rst1 = re.match(pat1, string, re.|)  #从头开始匹配,提取出poythony
pat2 = "o.*y"
rst2 = re.match(pat2, string, re.|)  #从头开始匹配,匹配为空
print(rst1)
print(rst2)
#2、search
#3、全局匹配函数
string = "poythopnyhjsptlohohojykjsa"
pat = "p.*?y"
#全局匹配格式re.compile(正则表达式).findall(数据)
rst = re.compile(pat).findall(string)
print(rst)

常见正则实例

匹配.com或.cn网址,以及如何匹配电话号码。

#实例:匹配.com和.cn网址
string = "<a href='http://www.baidu.com'>百度首页</a>"
pat = "[a-zA-Z]+://[^\s]*[.com|.cn]"
rst = re.compile(pat).findall(string)
print(rst)

#实例匹配电话号码
string = "djlahfdajnofdj021-8928874997678328skahfoihsofjo0773-776257672360fsohfhsifh"
pat = "\d{4}-\d{7}|\d{3}-\d{8}"
rst = re.compile(pat).findall(string)
print(rst)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值