Python进阶系列:(五)python正则表达式,jsonpath提取json格式数据


前言

Python系列文章主要是记录自己学习成果及知识输出整合,提供一个温故而知新的场所。


一、正则表达式

1、什么是正则表达式
一套规则 - 匹配字符串的,处理文本,提取信息

2、能做什么?
    检测一个输入的字符串是否合法 -- web开发项目 表单验证
        用户输入一个内容的时候,我们要提前做检测
        能够提高程序的效率并且减轻服务器的压力
    从一个大文件中找到所有符合规则的内容  -- 日志分析\爬虫
        能够高效的从一大段文字中快速找到符合规则的内容

二、正则表达式如何写

1.正则表达式验证工具

https://regex101.com/,一般使用这个网址进行验证,正则表达式是否正确

2.正则表达式=普通字符+特殊字符

普通字符:可以是需要匹配的任意字符,直接匹配
特殊字符:有特殊函数
常见特殊符号
    . 匹配除换行符之后的任意单个字符
    * 匹配前面的子表达式任意次(包括0次)
	+ 匹配前面的子表达式任一次或多次
 	{n}  表示匹配n次
    {n,} 表示匹配至少n次
 	{m,n} 匹配m~n次
	? 尽可能少的去匹配
	\ 进行转义,如果需要匹配一些特殊字符,就需要用到\进行转义
	\d 匹配0-9之间任意字符  [0-9]
	\D 匹配不是0-9之间任意字符 [^0-9]
	\s 匹配任意一个空白字符 包括空格  换行符 tab
	\S 匹配任意不是一个空白字符
	\w 匹配任意一个文字字符  包括字母 数字 下划线
	\W 匹配任意一个不是文字字符
	[] 是匹配几个字符之一
	^  表示文本的开头位置  非
	$  表示文本的结尾位置
	() 表示分组,也就是只保留括号里面的值进行输出

3.贪婪匹配和非贪婪匹配

贪婪匹配
在量词范围允许的情况下,尽量多的匹配内容
    .*x 表示匹配任意字符 任意多次数 遇到最后一个x才停下来
非贪婪(惰性匹配)匹配
    在量词范围允许的情况下,尽量少的匹配内容
    元字符 量词 ?
    .*?x 表示匹配任意字符 任意多次数 但是一旦遇到x就停下来

4.分组与两个函数的关系

findall 还是按照完整的正则进行匹配,总是只显示括号里匹配到的内容(取所有符合条件的,优先显示分组中的)。
search  (只取第一个符合条件的)还是按照完整的正则进行匹配,显示也是显示匹配到的第一个内容,但是我们可以通过给group方法传参数,来获取具体分组中的内容。
search 得到的结果是一个变量
    变量.group() 的结果完全和变量.group(0) 的结果完全一致
    变量.group(n) 的形式来指定获取第n个分组中匹配到的内容

为什么在search中不需要分组优先 而在findall中需要?
    加上括号是为了对真正需要的内容进行提取
    re = re.findall('<\w+>(\w+)<\w+>',<h1>asdha124728fysdjf24</h1>)
    print(re) 

以下为re模块正则表达式的一些示例代码:

import re
r = re
  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值