python参数化字符串,【python接口自动化】- 正则用例参数化

本文详细介绍了Python中re模块的正则表达式使用,包括匹配单个字符、列举字符、数量表示、分组、边界字符等,并通过实例展示了如何在接口自动化测试中提取相关数据。此外,还讲解了贪婪模式及其控制方式,帮助读者深入理解正则表达式在实际应用中的功能。
摘要由CSDN通过智能技术生成

​我们在做接口自动化的时候,处理接口依赖的相关数据时,通常会使用正则表达式来进行提取相关的数据。

​正则表达式,又称正规表示式、正规表示法、正规表达式、规则表达式、常规表示法(Regular Expression,在代码中常简写为regex、regexp或RE) 。它是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配。在很多文本编辑器里,正则表达式通常被用来检索、替换那些匹配某个模式的文本。而Python 自1.5版本起增加了re模块,它提供 Perl 风格的正则表达式模式。

正则表达式语法

表示单字符

​单字符:即表示一个单独的字符,比如匹配数字用\d,匹配非数字用\D。

​除以下语法,也可以匹配指定的具体字符,可以是1个也可以是多个。

字符

功能说明

.

匹配任意1个字符(除了\n)

[2a]

匹配[]中括号中列举的字符,如这里就是匹配2或者a这两个字符其中的一个

\d

匹配数字,即0-9

\D

匹配非数字

\s

匹配空白,即空格、tab键(tab键为两个空格)

\S

匹配非空白

\w

匹配单词字符,即a-z、A-Z、0-9、_(数字、字母、下划线)

\W

匹配非单词字符

​实例如下,这里先说明一下findall(匹配规则,要匹配的字符串)这个方法是查找所有匹配的数据,以列表的形式返回,后面会在re模块进行详解:

import re

# .:匹配任意1个字符

re1 = r'.'

res1 = re.findall(re1, '\nj8?0\nbth\nihb')

print(res1)# 运行结果:['j', '8', '?', '0', 'b', 't', 'h', 'i', 'h', 'b']

# []:匹配列举中的其中一个

re2 = r"[abc]"

res2 = re.findall(re2, '1iugfiSHOIFUOFGIDHFGFD2345a6a78b99cc')

print(res2)# 运行结果:['a', 'a', 'b', 'c', 'c']

# \d:匹配一个数字

re3 = r"\d"

res3 = re.findall(re3, "dfghjkl32212dfghjk")

print(res3)# 运行结果:['3', '2', '2', '1', '2']

# \D:匹配一个非数字

re4 = r"\D"

res4 = re.findall(re4, "d212dk?\n$%3;]a")

print(res4)# 运行结果:['d', 'd', 'k', '?', '\n', '$', '%', ';', ']', 'a']

# \s:匹配一个空白键或tab键(tab键实际就是两个空白键)

re5 = r"\s"

res5 = re.findall(re5,"a s d a 9999")

print(res5)# 运行结果:[' ', ' ', ' ', ' ', ' ']

# \S: 匹配非空白键

re6 = r"\S"

res6 = re.findall(re6, "a s d a 9999")

print(res6)# 运行结果:['a', 's', 'd', 'a', '9', '9', '9', '9']

# \w:匹配一个单词字符(数字、字母、下划线)

re7 = r"\w"

res7 = re.findall(re7, "ce12sd@#a as_#$")

print(res7)# 运行结果:['c', 'e', '1', '2', 's', 'd', 'a', 'a', 's', '_']

# \W:匹配一个非单词字符(不是数字、字母、下划线)

re8 = r"\W"

res8 = re.findall(re8, "ce12sd@#a as_#$")

print(res8)# 运行结果:['@', '#', ' ', '#', '$']

# 匹配指定字符

re9 = r"python"

res9 = re.findall(re9, "cepy1thon12spython123@@python")

print(res9)# 运行结果:['python', 'python']

表示数量

​如果要匹配某个字符多次,就可以在字符后面加上数量进行表示,具体规则如下:

字符

功能说明

*

匹配前一个字符出现0次或者无限次,即可有可无

+

匹配前一个字符出现1次或无限次,即至少1次

?

匹配前一个字符出现0次或1次,即要么没有,要么只有1次

{m}

匹配前一个字符出现m次

{m,}

匹配前一个字符至少出现m次

{m,n}

匹配前一个字符出现从m到n次

​实例如下:

import re

# *:表示前一个字符出现0次以上(包括0次)

re21 = r"\d*" # 这里匹配的规则,前一个字符是数字

res21 = re.findall(re21, "343aa1112df345g1h6699") # 如匹配到a时,属于符合0次,但因为没有值所以会为空

print(res21)# 运行结果:['343', '', '', '1112', '', '', '345', '', '1', '', '6699', '']

# ? : 表示0次或者一次

re22 = r"\d?"

res22 = re.findall(re22, "3@43*a111")

print(res22)# 运行结果:['3', '', '4', '3', '', '', '1', '1', '1', '']

# {m}:表示匹配一个字符m次

re23 = r"1[3456789]\d{9}" # 手机号:第1位为1,第2位匹配列举的其中1个数字,第3位开始是数字,且匹配9次

res23 = re.findall(re23,"sas13566778899fgh256912345678jkghj12788990000aaa113588889999")

print(res23)# 运行结果:['13566778899', '13588889999']

# {m,}:表示匹配一个字符至少m次

re24 = r"\d{7,}"

res24 = re.findall(re24, "sas12356fgh1234567jkghj12788990000aaa113588889999")

print(res24)# 运行结果:['1234567', '12788990000', '113588889999']

# {m,n}:表示匹配一个字符出现m次到n次

re25 = r"\d{3,5}"

res25 = re.findall(re25, "aaaaa123456ghj333yyy77iii88jj909768876")

print(res25)# 运行结果:['12345', '333', '90976', '8876']

匹配分组

字符

功能说明

|

匹配左右任意一个表达式

(ab)

将括号中字符作为一个分组

​实例如下:

import re

# 同时定义多个规则,只要满足其中一个

re31 = r"13566778899|13534563456|14788990000"

res31 = re.findall(re31, "sas13566778899fgh13534563456jkghj14788990000")

print(res31)# 运行结果:['13566778899', '13534563456', '14788990000']

# ():匹配分组:在匹配规则的数据中提取括号里的数据

re32 = r"aa(\d{3})bb"# 如何数据符合规则,结果只会取括号中的数据,即\d{3}

res32 = re.findall(re32, "ggghjkaa123bbhhaa672bbjhjjaa@45bb")

print(res32)# 运行结果:['123', '672']

表示边界

字符

功能说明

^

匹配字符串开头,只能匹配开头

$

匹配字符串结尾,只能匹配结尾

\b

匹配一个单词的边界(单词:字母、数字、下划线)

\B

匹配非单词的边界

​实例如下:

import re

# ^:匹配字符串的开头

re41 = r"^python" # 字符串开头为python

res41 = re.findall(re41, "python999python") # 只会匹配这个字符串的开头

res411 = re.findall(re41, "1python999python") # 因为开头是1,第1位就不符合了

print(res41)# 运行结果:['python']

print(res411)# 运行结果:[]

# $:匹配字符串的结尾

re42=r"python$"# 字符串以python结尾

res42 = re.findall(re42, "python999python")

print(res42)# 运行结果:['python']

# \b:匹配单词的边界,单词即:字母、数字、下划线

re43 = r"\bpython" # 即匹配python,且python的前一位是不是单词

res43 = re.findall(re43, "1python 999 python") # 这里第1个python的前1位是单词,因此第1个是不符合的

print(res43)# 运行结果:['python']

# \B:匹配非单词的边界

re44 = r"\Bpython" # 即匹配python,且python的前一位是单词

res44 = re.findall(re44, "1python999python")

print(res44)# 运行结果:['python', 'python']

贪婪模式

​python里数量词默认是贪婪的,总是尝试匹配尽可能多的字符,而非贪婪模式则是尝试匹配尽可能少的字符,在表示数量的表达式后加上问号(?)就可以关闭贪婪模式。

​如下例子,匹配2个以上的数字,如果符合条件它会一直匹配到不符合才停止,如其中的34656fya,34656符合2个数字以上,那么它会一直匹配到6为止,如果关闭贪婪模式,那么在满足2个数字时就会停止,最后可以匹配到34、65。

import re

# 默认的贪婪模式下

test = 'aa123aaaa34656fyaa12a123d'

res = re.findall(r'\d{2,}', test)

print(res)# 运行结果:['123', '34656', '12', '123']

# 关闭贪婪模式

res2 = re.findall(r'\d{2,}?', test)

print(res2)# 运行结果:['12', '34', '65', '12', '12']

re模块

​在python中使用正则表达式,就会用到re模块来进行操作,提供的方法一般需要传入两个参数:

By © 2017 likecs 版权所有.

粤ICP备12038626号-2

Powered By WordPress . Theme by Luju

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值