1、正则表达式的定义
正则表达式,又称规则表达式。(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。许多程序设计语言都支持利用正则表达式进行字符串操作。例如,在Perl中就内建了一个功能强大的正则表达式引擎。正则表达式这个概念最初是由Unix中的工具软件(例如sed和grep)普及开的。正则表达式通常缩写成“regex”,单数有regexp、regex,复数有regexps、regexes、regexen。
2、正则表达式的作用
给定一个正则表达式和另一个字符串,我们可以达到如下目的:
1、给定的字符串是否符合正则表达式的过滤逻辑(称为“匹配”)
2、可以通过正则表达式,从字符串中获取我们想要的特定部分。
3、正则表达式的特点
1、灵活性、逻辑性和功能性非常强
2、可以迅速地用极简单的方式达到字符串的复杂控制
3、对于刚接触的人来说,比较晦涩难懂
4、使用场景
1.match 匹配 search查找
## match从开头开始匹配
import re
msg ="娜扎热巴戴斯佟丽娅"
pattern =re.compile("佟丽娅")
result =pattern.match(msg)
print (result) #None
------------------------------------------------------------------
## search只要存在就能匹配到
import re
msg ="娜扎热巴戴斯佟丽娅"
pattern =re.compile("佟丽娅")
result =pattern.search(msg)
print (result.span()) #返回位置(18, 27)
print (result.group()) #佟丽娅
2.search与findall查找
import re
msg ="acsd7sdfa8fsadfas00"
result =re.search('[a-z][0-9][a-z]',msg)
print (result.group()) #d7s
-------------------------------------------------------------------
import re
msg ="acsd7sdfa8fsadfas00"
result =re.findall('[a-z][0-9][a-z]',msg) #findall匹配整个字符串,找到一个继续向下找一直找到字符串结尾
print (result) #['d7s', 'a8f']
3.qq号码验证 5~11开头不能是0
'.'用于匹配除换行符(\n)之外的所有字符
'^'用于匹配字符串的开始,即行首
'$'用于匹配字符串的末尾(末尾如果有换行符\n,就匹配\n前面的那个字符),即行尾
'*'用于将前面的模式匹配0次或多次(贪婪模式,即尽可能多的匹配)>=0
'+'用于将前面的模式匹配1次或者多次(贪婪模式) >=1
'?'用于将前面的模式匹配0次或者1次(贪婪模式)0,1
'*?,+?,??'即上面三种特殊字符的非贪婪模式(尽可能少的匹配)
'{m}'用于验证将前面的模式匹配m次
'{m,}'用于验证将前面的模式匹配m次或者多次 >=m
'{m,n}'用于将前面的模式匹配m次到n次(贪婪模式),即最小匹配m次,最大匹配n次
'{m,n}?'即上面'{m,n}'的非贪婪版本
import re
qq ='1484341411'
result =re.match('^[1-9][0-9]{4,10}$',qq)
print (result.group()) #1484341411
4.用户名可以是字母或者数字,不能是数字开头,用户名长度必须6位以上
\A:表示从字符串的开始匹配
\Z:表示从字符串的结束处匹配,如果存在换行,只匹配到换行前的结束字符串
\b:匹配一个单词边界,也就是指单词和空格间的位置。例如,‘py\b’可以匹配“python”中的‘py’,但不能匹配“openpyxl”中的‘py’
\B:匹配非单词边界。‘py\b’可以匹配“openpyxl”中的‘py’,但不能匹配“python”中的‘py’
\d:匹配任意数字,等价于[0-9]
\D:匹配任意非数字字符,等价于[^\d]
\s:匹配任意空白字符,等价于[\t\n\r\f]
\S:匹配任意非空白字符,等价于[^\s]
\w:匹配任意字母及下划线,等价于[a-zA-Z0-9_]
\W:匹配任意非字母数字及下划线,等价于[^\w]
\\:匹配原义的反斜杠\
import re
username ='admin001#$23423'
result =re.search('^[a-zA-Z][0-9a-zA-Z_]{5,}',username)
print (result.group()) #admin001
5.匹配.py文件
import re
msg ='a*py ab.txt bb.py kk.png uu.py apyb.txt'
result =re.findall(r'\w*\.py\b',msg)
print (result) #['bb.py', 'uu.py']
6.分组 匹配数字0-100数字
# | #表示或者的意思
import re
n ='100'
result =re.match(r'[1-9]?\d?$|100$',n)
print (result.group())
7.验证输入的邮箱 163 126 qq
import re
email ='7345435341@qq.com'
result =re.match(r'\w{5,20}@(163|126|qq)\.(com|cn)',email)
print (result.group())
8.不是4、7结尾的手机号码(11位)
import re
phone ='13534643679'
result =re.match(r'1\d{9}[0-35-689]$',phone)
print (result.group()) #13534643679
9.分别提取
# () 表示分组 group(1)表示提取到第一组的内容 group(2)表示第二组的内容
import re
phone ='010-12345678'
result =re.match(r'(\d{3}|\d{4})-(\d{8})$',phone)
print (result) #<_sre.SRE_Match object at 0x10339e938>
# 分别提取
print (result.group()) #010-12345678
print (result.group(1)) #010
print (result.group(2)) #12345678
import re
msg ='<html><h1>abc</h1></html>'
msg1 ='<h1>hello</h1>'
result =re.match(r'<[0-9a-zA-Z]+>(.+)</[0-9a-zA-Z]+>',msg)
print (result) #<_sre.SRE_Match object at 0x10c7d60a8>
print (result.group(1)) #<h1>abc</h1>
------------------------------------------------------------------
import re
msg ='<h1>hello</h1>'
result =re.match(r'<([0-9a-zA-Z]+)>(.+)</\1>$',msg)
print (result) #<_sre.SRE_Match object at 0x1090c3938>
print (result.group()) #<h1>hello</h1>
import re
msg ='<html><h1>abc</h1></html>'
result =re.match(r'<([0-9a-zA-Z]+)><([0-9a-zA-Z]+)>(.+)</\2></\1>$',msg)
print (result.group()) #<html><h1>abc</h1></html>
print (result.group(1)) #html
print (result.group(2)) #h1
print (result.group(3)) #abc
------------------------------------------------------------------
import re
msg ='<html><h1>abc</h1></html>'
result =re.match(r'<(?P<name1>\w+)><(?P<name2>\w+)>(.+)</(?P=name2)></(?P=name1)>',msg)
print (result.group()) #<html><h1>abc</h1></html>
print (result.group(1)) #html
print (result.group(2)) #h1
print (result.group(3)) #abc
10.sub替换 split转换成列表
import re
def func(temp):
num =temp.group()
num1 =int(num) +1
return str(num1)
result1 =re.sub(r'\d+',func,'java:99,python:95')
result =re.split(r'[,:]','java:99,python:95')
print (result1) #java:100,python:96 [替换]
print (result) #['java', '99', 'python', '95'] [转换列表]
如果文章有任何错误欢迎不吝赐教,其次大家有任何关于运维的疑难杂问,也欢迎和大家一起交流讨论。关于运维学习、分享、交流,笔者开通了微信公众号【运维猫】,感兴趣的朋友可以关注下,欢迎加入,建立属于我们自己的小圈子,一起学运维知识。群主还经营一家猫小铺饰品店,喜欢的小伙伴欢迎????前来下单。
扫描二维码
获取更多精彩
运维猫公众号
有需要技术交流的小伙伴可以加我微信,期待与大家共同成长,本人微信:
扫描二维码
添加私人微信
运维猫博主
扫码加微信
最近有一些星友咨询我知识星球的事,我也想继续在星球上发布更优质的内容供大家学习和探讨。运维猫公众号平台致力于为大家提供免费的学习资源,知识星球主要致力于即将入坑或者已经入坑的运维行业的小伙伴。
点击阅读原文 查看更多精彩内容!!!