前言:
如今我们对“正则表达式提取json中的数值”都比较着重,同学们都想要了解一些“正则表达式提取json中的数值”的相关内容。那么小编在网上网罗了一些有关“正则表达式提取json中的数值””的相关文章,希望兄弟们能喜欢,咱们一起来学习一下吧!>>>> 前 言
我们在做接口自动化的时候,处理接口依赖的相关数据时,通常会使用正则表达式来进行提取相关的数据,今天在这边和大家聊聊如何在python中使用正则表达式。
正则表达式,又称正规表示式、正规表示法、正规表达式、规则表达式、常规表示法(英语:Regular Expression,在代码中常简写为regex、regexp或RE),是计算机科学的一个概念。
正则表达式使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串。按某种规则匹配的表达式被称之为正则表达式,在python使用正则表达式,可以使用官方库re来实现,学习re模块之前,我们先来了解一下正则表达式的基本语法。
>>>> 正 则 表 达 式 语 法
NO.1表示单字符
单字符:即表示一个单独的字符,比如匹配数字用\d ,匹配非数字使用\D,具体规则如下:
字符
功能
.
匹配任意1个字符(除了\n)
[7a ]
匹配[ ]中列举的字符,这里就是匹配7或者a这两个字符其中的一个
\d
匹配数字,即0-9
\D
匹配非数字,即不是数字
\s
匹配空白,即 空格,tab键
\S
匹配非空白
\w
匹配单词字符,即a-z、A-Z、0-9、_
\W
匹配非单词字符
NO..2表示数量
如果要匹配某个字符多次,就可以在字符后面加上数量进行表示,具体规则如下:
字符
功能
*
匹配前一个字符出现0次或者无限次,即可有可无
+
匹配前一个字符出现1次或者无限次,即至少有1次
?
匹配前一个字符出现1次或者0次,即要么有1次,要么没有
{m}
匹配前一个字符出现m次
{m,}
匹配前一个字符至少出现m次
{m,n}
匹配前一个字符出现从m到n次
NO.3表示边界
字符
功能
^
匹配字符串开头
$
匹配字符串结尾
\b
匹配单词的边界
\B
匹配非单词边界
NO.4匹配分组
字符
功能
|
匹配左右任意一个表达式
(ab)
将括号中字符作为一个分组
\num
引用分组num匹配到的字符串
(?P<name>)
分组起别名
(?P=name)
引用别名为name分组匹配到的字符串
NO.5
贪婪模式
贪婪模式:Python里数量词默认是贪婪的,总是尝试匹配尽可能多的字符;
如下案例:有一个字符串s,我们需要在字符串中匹配3个以上的数字,字符串中数字有8个,贪婪模式会尽可能匹配更多字符,3个以上,8个也是3个以上,那么这里匹配的结果就是8个数字。
非贪婪模式:总是尝试匹配尽可能少的字符,在"*","?","+","",后面加上?,可以关闭贪婪模式
关闭贪婪模式之后,尽可能获取更少的,如下,只获取到最前面的3个数值(至少3个,非贪婪就是最前面的3个)
>>>> r e 模 块 的 使 用
在python中使用正则表达式,需要用到re模块来进行操作,这边给大家介绍几个re模块中常用的方法。
No.1 re.match函数
参数说明:接收两个参数,第一个是匹配的规则,第二个是匹配的目标字符串,re.match尝试从字符串的起始位置匹配一个模式,匹配成功 返回的是一个匹配对象(这个对象包含了我们匹配的信息),如果不是起始位置匹配成功的话,match()返回的就是空。
No.2 re.search 方法
参数说明:接收两个参数,第一个是匹配的规则,第二个是匹配的目标字符串,re.search 扫描整个字符串并返回第一个成功的匹配。re.match与re.search的区别re.match从字符串的开始位置进行匹配,如果字符串开始不符合正则表达式,则匹配失败,函数返回空;而re.search匹配整个字符串,直到找到一个匹配成功的则进行返回,如果整个字符串中都没有找到匹配成功的,则返回空。
No.3 findall 方法
参数说明:接收两个参数,第一个是匹配的规则,第二个是匹配的目标字符串,在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果没有找到匹配的,则返回空列表。
注意:match 和 search 是匹配一个结果, findall 匹配处所有符合规则的结果。
No.4 sub 方法
替换字符串中的某些字符,可以用正则表达式来匹配被选子串。
re.sub(pattern, repl, string, count=0 )参数:pattern:匹配的规则;repl:匹配之后替换的新内容;string:需要按规则替换的字符串;count:替换的次数,可以不传参,默认替换所有符合规则的。
>>>> 案 例 演 示
需求:整个正则表达式提取如下接口登录之后返回的token值。
接口地址:请求参数:返回结果:
{'refresh': 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ0b2tlbl90eXBlIjoicmVmcmVzaCIsImV4cCI6MTY1Mzk4MzMyNSwiaWF0IjoxNjUzODk2OTI1LCJqdGkiOiI2NTE2MTE0OGFhMDY0NWNjYWY2ZWE4YmYzYzY1YjE1ZSIsInVzZXJfaWQiOjJ9.fMkJfOdhczbr1MqvYE5b0qYlC5GewBlFZbrteMOLUv0', 'token': 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ0b2tlbl90eXBlIjoiYWNjZXNzIiwiZXhwIjoxNjUzOTgzMzI1LCJpYXQiOjE2NTM4OTY5MjUsImp0aSI6ImQ3Nzg1ZjY0YTk2YzQwYzliZDcwMmUxMDgzNjVkNWU5IiwidXNlcl9pZCI6Mn0.UNmLRQsXnZBltgL7QQVuBON2UEBQav87NSGy5Iqbnws'}
实现代码
import requestsimport re# 登录接口login_url = ';# 请求登录接口,进行登录params = { "username": "test", "password": "123456"}response = requests.post(url=login_url, json=params)#使用正则表达式提取tokenresult = re.search(r'token":"(.+?)"',response.text)token = result.group(1)
上述案例中关于token的提取我们使用的是正则表达式,除了正则之外,进行数据提取还有很多方式可以实现,比如jsonpath,xpath等等。jsonpath只能在接口返回的是json格式数据的情况下使用,xpath适用于接口返回的是XML或者HTML时使用。
标签: #正则表达式提取json中的数值