正则表达式(一)

正则表达式(一)

一、概述

  • 定义

    正则表达式是一种文字匹配模式,其本质是由一系列字符和特殊符号构成的,这个字串即正则表达式。

  • 原理

    通过普通字符和特定含义的字符,来组成字符串,用以描述一定的字符串规则,比如:重复,位置等。来表达某类特定的字符串,进而匹配。

  • 应用

    目前在自动化、接口测试中,如Jmeter进行接口关联操作时,往往会运用正则表达式进行匹配。

本篇主要讲述正则表达式中的基础,也是最重要的元字符。

二、元字符的使用

1、匹配字符

匹配字符:.[...][^...]\d\D\w\W\s\S

  • 普通字符

匹配规则:每个普通字符匹配其对应的字符

>>> re.findall('abc','abcdefgabc')
['abc','abc']

普通字符和我们在word中找一个文字是一样的,想找’abc’就直接输入’abc’。汉字也是可以直接匹配的。

re模块是python独有的匹配字符串的模块。在下一篇会继续讲解。

  • 匹配单个字符

元字符:.

匹配规则:匹配除换行外的任意一个字符

>>> re.findall('马.','马云,马三和马化腾')
['马云', '马三', '马化']

在这里插入图片描述

被匹配的字串是一个整体,根据要查找的马.去匹配所有符合规则的字串。

  • 匹配字符集

元字符:[字符集]

匹配规则:匹配字符集中的任意一个字符

表达形式:

[abc#!好] 表示 [] 中的任意一个字符
[0-9],[a-z],[A-Z] 表示区间内的任意一个字符
[_#?0-9a-z] 混合书写,一般区间表达写在后面

>>> re.findall('[aeiou]','How are you!')
['o', 'a', 'e', 'o', 'u']

在这里插入图片描述

  • 匹配字符集反集

元字符:[^字符集]

匹配规则:匹配除了字符集以外的任意一个字符

>>> re.findall('[^1-5]','0123456789')   
['0', '6', '7', '8', '9']
  • 匹配任意(非)数字字符

元字符:\d\D

匹配规则:\d匹配任意数字字符,\D匹配任意非数字字符

>>> re.findall('\d{1,5}','Mysql:3306,Redis:6379')
['3306', '6379']

在这里插入图片描述

  • 匹配任意(非)普通字符

元字符:\w\W

匹配规则:\w匹配普通字符,\W匹配非普通字符

说明:普通字符指数字,字母,下划线,汉字。

>>> re.findall('\w+','Mysql:3306,Redis:6379')    
['Mysql', '3306', 'Redis', '6379']

在这里插入图片描述

  • 匹配任意(非)空字符

元字符:\s\S

匹配规则:\s匹配空字符,\S匹配非空字符

说明:空字符指空格\r \n \t \v \f 字符

>>> re.findall('\S+','Hello World')
['Hello', 'World']

在这里插入图片描述

2、匹配重复

  • 元字符:*

匹配规则:匹配前面的字符出现0次或多次

>>> re.findall('12*','13,123,1223,12223')
['1', '12', '122', '1222']

在这里插入图片描述

  • 元字符:+

匹配规则:匹配前面的字符出现1次或多次

>>> re.findall('[A-Z][a-z]+','Hello Python')
['Hello', 'Python']

在这里插入图片描述

注意:第一个[A-Z]只匹配了H和P,[a-z]+匹配了后面的字母。

  • 元字符:?

匹配规则:匹配前面的字符出现0次或1次

>>> re.findall('-?[0-9]+','坐标:x:13,y:-6,z:20')
['13', '-6', '20']

在这里插入图片描述

  • 元字符:{n}

匹配规则:匹配前面的字符出现n次

>>> re.findall('1[0-9]{10}','Tom:13868686888')
['13868686888']

在这里插入图片描述

  • 元字符:{m,n}

匹配规则:匹配前面的字符出现m-n次

>>> re.findall('1[0-9]{5,10}','lily:146245,tom:123457212,lucy:152724')
['146245', '123457212', '152724']

匹配数字1开头,后面跟着510个数字的字串

在这里插入图片描述

3、匹配位置

  • 元字符:^

匹配规则:匹配目标字符串的开头位置

re.findall('^今天','今天星期几?今天星期一,明天星期二')
['今天']

在这里插入图片描述

注意:加^和不加的区别。

  • 元字符:$

匹配规则:匹配目标字符串的结尾位置

>>> re.findall('星期二$','明天星期几?明天星期二') 
['星期二']

规则技巧:^$一定是在正则表达式的开头和结尾处。如果两个同时出现,则中间的部分必须匹配整个目标字符串的全部内容

在这里插入图片描述

  • 匹配(非)单词的边界位置

元字符:\b,\B

匹配规则:\b表示单词边界,\B表示非单词边界

说明:单词边界指数字字母(汉字)下划线与其他字符的交界位置

>>> re.findall(r'\bis\b','This is a test')
['is']

注意: 当元字符符号与Python字符串中转义字符冲突的情况则需要使用r将正则表达式字符串声明为原始字符串,如果不确定那些是Python字符串的转义字符,则可以在所有正则表达式前加r。

4、其他

  • 或关系

元字符:|

匹配规则:匹配|两侧任意的正则表达式即可

>>> re.findall('com|cn',"www.baidu.com/www.google.com/www.qq.cn")
['com','com','cn']
  • 转义

元字符:\

匹配规则:如果匹配的目标字符串中包含正则表达式特殊字符,则在表达式中元字符就想表示其本身含义时就需要进行 \ 处理。

特殊字符: . * + ? ^ $ [] () {} | \
  • 操作方法:在正则表达式元字符前加 \ 则元字符就是去其特殊含义,就表示字符本身,匹配特殊字符 . 时使用 \. 表示本身含义
>>> re.findall('-?\d+\.?\d*',"123,-123,1.23,-1.23")
['123', '-123', '1.23', '-1.23']

-?\d+\.?\d*这里的.就是表示本身含义,而非元字符了。

三、小结

本篇主要涉及了元字符的使用,也是正则表达式的基础。

序号元字符含义
01.匹配单个字符
02[字符集]匹配字符集中的任意一个字符
03[^字符集]匹配除了字符集以外的任意一个字符
04\d\D匹配任意(非)数字字符
05\w\W匹配任意(非)普通字符
06\s\S匹配任意(非)空字符
07*匹配前面的字符出现0次或多次
08+匹配前面的字符出现1次或多次
09?匹配前面的字符出现0次或1次
10{n}匹配前面的字符出现n次
11{m,n}匹配前面的字符出现m-n次
12^匹配目标字符串的开头位置
13$匹配目标字符串的结尾位置
14\b\B\b表示单词边界,\B表示非单词边界

下一篇,再来讲(非)贪婪模式,re模块的一些进阶用法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梓沫1119

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值