专栏首页运维猫正则表达式(二)

正则表达式(二)

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'] [转换列表]

如果文章有任何错误欢迎不吝赐教,其次大家有任何关于运维的疑难杂问,也欢迎和大家一起交流讨论。

本文分享自微信公众号 - 运维猫(centos15)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-01-17

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • apache+Keepalived集群实战

    keepalived 是一个类似于layer3, 4 & 5 交换机制的软件,也就是我们平时说的第3 层、第4 层和第5层交换。Keepalived 的作用是检...

    胡齐
  • 如何使用 fail2ban 防御 SSH 服务器的暴力破解攻击

    对于SSH服务的常见的攻击就是暴力破解攻击——远程攻击者通过不同的密码来无限次地进行登录尝试。当然SSH可以设置使用非密码验证验证方式来对抗这种攻击,例如公钥验...

    胡齐
  • SVN版本控制服务

    SVN是Subversion的简称,是一个开放源代码的版本控制系统,相较于CVS,它采用了分支管理系统,它的设计目标就是取代CVS。互联网上很多版本控制服务已从...

    胡齐
  • Python中re模块基本用法解析

    在正则表达式中用()括起来可以使用group()输出, 若有n个(), 那么可以表示为group(n), 输出第n个括号匹配的内容.

    用户2398817
  • Python网络爬虫之正则表达式

    正则表达式非Python独有,在Python中通过re库模块实现。 ? 下面是一些常见的匹配模式 ? re.match re.match尝试从字符串的起始位置匹...

    企鹅号小编
  • python爬虫从入门到放弃(五)之 正则的基本使用

     什么是正则表达式 正则表达式是对字符串操作的一种逻辑公式,就是 事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符”,这个“规则字符” 来表达...

    coders
  • 微信公众帐号推荐

    用户2930719
  • 水蒸气热物性参数计算-IAPWS97.js

    一个计算水蒸气性质的js库,可以根据压力和温度确定其他参数,如熵、焓,导热系数、比热、表面张力系数等:

    周星星9527
  • 荷兰记者口述:危机四伏的公共WiFi

    大数据文摘
  • 亚马逊正在开发家用机器人!老男孩贝佐斯的绝密计划曝光了

    有知情人士向彭博社透露,这家零售和云计算巨头已经启动了一项雄心勃勃的绝密计划,想开发一款家用机器人。这个项目的代号是“Vesta(维斯塔)”,取自罗马神话中的家...

    量子位

扫码关注云+社区

领取腾讯云代金券