前言:前面介绍了关于JS逆向所需的基本知识,比如前端三件套等,从这里开始就要进入到数据分析的范围内了,当然对于一些小白而言一些基本的知识还是需要知道的,比如正则,XPATNY与BS4;三个内容用三篇博文来详细介绍一下,与JS开发者共同学习与突破,本篇文章先介绍一下正则表达式。


正则表达式

Regular Expression,译作正则表达式或正规表示法,表示有规则的表达式,意思是说,描述一段文本排列规则的表达式。正则表达式并不是Python的一部分。而是一套独立于编程语言,用于处理复杂文本信息的强大的高级文本操作工具。正则表达式拥有自己独特的规则语法以及一个独立的正则处理引擎,我们根据正则语法编写好规则(模式)以后,引擎不仅能够根据规则进行模糊文本查找,还可以进行模糊分割,替换等复杂的文本操作,能让开发者随心所欲地处理文本信息。正则引擎一般由编程语言提供操作,像python就提供了re模块或regex模块来调用正则处理引擎。

正则表达式在处理文本的效率上不如系统自带的字符串操作,但功能却比系统自带的要强大许多

最早的正则表达式来源于Per语言,后面其他的编程语言在提供正则表达式操作时基本沿用了Per语言的正则语法,所以我们学习python的正则以后,也可以在java,php,go,javascript,sql等编程语言中使用。

正则对字符串或文本的操作,无非是分割、匹配、查找和替换。

在线测试工具 正则表达式在线测试 - 站长工具

import res = "tools_chaina|||12213132_astrust"ret = re.findall("[a-z]+",s)    #其中第一个参数是元字符 共有大概十几个
print(ret)

1,元字符

元字符是具有特殊含义的字符

下面是一些元字符的使用的方法与代码实例 

import re"""re.findall(正则模式,文本)基于正则模式查找所有匹配的文本内容"""
#part1:通配符->. 字符集->[]
ret1 = re.findall("a","a,b,c,d,e,a")    #
ret2 = re.findall(".","a,b,e,d,e")      #通配符ret3 = re.findall("[ace]","a,b,c,d,e")  #字符集  其中任何一个字符符合要求就可以ret4 = re.findall("[a-z]","a,b,c,d,e")  #a~z的所有字符都匹配出来 合成一个列表ret5 = re.findall("[0-9]","1,2,3,4,5")  #0~9的所有字符ret6 = re.findall("\d","1,2,3,4,5,q,d,q")     #匹配所有的数字符号ret61 = re.findall("\w","1,2,3,4,5,q,w,d,w,A,S,D")  #匹配所有的数字加上字母符号ret7 = re.findall("[0-9a-z]","1,a,2,b,3")ret71 = re.findall("[A-Za-z]","1,a,2,b,3,A,A,S,D,E,F")ret8 = re.findall("[^a-z]","1,a,2,b,3")    #匹配一个没有在中括号出现的任何原子ret9 = re.findall("[^-9,]","1,a,2,b,3")print("ret1:",ret1)print("ret2:",ret2)print("ret3:",ret3)print("ret4:",ret4)print("ret5:",ret5)print("ret6:",ret6)print("ret61:",ret61)print("ret7",ret7)print("ret71:",ret71)print("ret8:",ret8)print("ret9:",ret9)#part2: + 0~多次   * 1~多次  ? [0,1]  {} [m,n]   重复ret2 = re.findall("\d+","a,b,234,d,6,888")      #默认贪婪匹配ret3 = re.findall("\d+?","a,b,234,d,6,888")     #取消贪婪匹配ret4 = re.findall("\d*","a,b,234,d,6,888")ret5 = re.findall("\w+","a,b,234,d,hiydcwhvc,qigeqc")ret6 = re.findall("\w*","a,b,234,d,hiydcwhvc,qigeqc")ret7 = re.findall("123*","a,b,12,d,hiydcwhvc,qigeqc,123")ret8 = re.findall("\w{2,9}","a,b,234,d,hiydcwhvc,qigeqc")ret9 = re.findall("123?","a,b,12,d,hiydcwhvc,qigeqc,123")print(ret9)#part2:位置元字符  ^ 开头  $ 结尾ret3 = re.findall("^\d+","34,banana,255,orange,65536")  #查找第一个数字字符串 没有就返回空ret4 = re.findall("^\w+","peach,34,banana,255,orange,65536")ret5 = re.findall("\w+$","peach,34,banana,255,orange,65536") #最后一个数字或者字母的字符串print(ret5)# part4:
# | 指定原子或正则模式进行二选一或多选一
# () 具备模式捕获的能力,也就是优先提取数据的能力,(?:)可以取消模式捕获ret1 = re.findall(",\w{5},",",apple,banana,peach,orange,melon,")  #提取的内容中间包含有两个逗号ret2 = re.findall(",(\w{5}),",",apple,banana,peach,orange,melon,") #只提取括号中的内容ret3 = re.findall("\w+@\w+\.com","123abc@163.com,....234xyz@qq.com")ret4 = re.findall("(?:\w+)@163\.com","123abe@163.com234xy20gco")
ret5 = re.findall("\w+@(?:qq|163)\.com","123abc@163.com,....234x")print(ret4)#part5: 转义符 \d \D \w \W \n \s \b \B
#(1)将普通符号转移成特殊符号
#(2)将特殊符号转换成普通符号
"""\b 1个单词边界原子"""
txt ="my name is nana. nihao,nana"
ret = re.findall(r"na",txt)
ret1 = re.findall(r"\bna", txt)   
print(ret)

#正则表达式的进阶
text ="<12> <xyz> <!@#$%> <1a!#e2> <>"
ret1 = re.findall("<\d+>",text)
ret2 = re.findall("<\w+>",text)
ret3 = re.findall("<.t>",text)
ret4 = re.findall("<.+?>",text) #增加一个问号就可以将上面的分割取出
ret5 = re.findall("<.*?>",text) #增加一个问号就可以将上面的分割取出
print(ret4)

2,正则表达式的常用接口

2.1 split

def split(patter,string,maxsplit=0,flags=0)
split()  #函数返回一个列表,对字符串进行正则分割。
import re
txt:="my name is moluo"
ret = re.split("\s",txt)
print(ret)   # 'my', 'name', 'is', 'moluo'
# 可以通过指定 maxsplit 参数来控制分割的次数,例如,仅在第1次出现时才拆分字符串:
import re
txt= "mYname is yuan"
ret = re.split("\s+", txt)
print(ret)

2.2 sub和subn

def sub(pattern,repl,string,count=0,flags=0) 返回匹配后的结果

def subn(pattern,repl,string,count=0,flags=0) 返回匹配后的结果和次数

# sub()函数用选择的文本替换匹配:
# 找到第一个空白字符并进行替换
import re
txt ="myname is yuan"
ret = re.sub(r"\s+","lei",txt,1)
print(ret)

2.3 search

 ret = re.search(r"(?P<tel>1[3-9]\d{9}).*?(?P<email>\d+@qq\.com)","我的手机号码是13928835900,我的QQ号码是232324@qq.com")print(ret.group("tel"))print(ret.group("email"))

2.4 match

#(3)match     #查找的字符串必须在开头才可以查到
ret = re.match(r"^1[3-9]\d{9}","13928835900,我的QQ号码是232324@qq.com")
print(ret)

2.5 complie

1. 预编译正则表达式模式

re.compile 允许你将一个正则表达式字符串编译成一个正则表达式模式对象(Pattern object)。这样做的好处是,如果你需要多次使用同一个正则表达式模式进行匹配,编译一次后再多次使用可以提高效率。

2. 提高匹配效率

当你需要频繁使用同一个正则表达式进行匹配时,预编译可以显著提高性能。这是因为每次使用正则表达式时,Python 都需要先解析字符串,然后进行匹配。通过预编译,可以避免重复解析字符串,从而加快匹配速度

#(6)compile 编译
s1="12 apple 34 peach 77 banana"
ret = re.findall(r"\d+",s1)
print(ret)
s2="22 apple 33 peach 44 banana"
ret = re.findall(r"\d+",s2)
print(ret)reg = re.compile(r"\d+")
print(reg.findall(s1))

未完待续。。。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/913712.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/913712.shtml
英文地址,请注明出处:http://en.pswp.cn/news/913712.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Mac mini 高性价比扩容 + Crossover 游戏实测 全流程手册

Mac mini 高性价比扩容 Crossover 游戏实测 全流程手册 本文将图文并茂地指导你如何&#xff1a; 为 M4 Mac mini 外置扩容&#xff08;绿联 USB4 硬盘盒 致态 TiPlus7100&#xff09;安装并配置 Crossover/Whisky 运行 Windows 应用实测游戏运行性能、诊断常见异常一、准备工…

【PyTorch】PyTorch中torch.nn模块的卷积层

PyTorch深度学习总结 第七章 PyTorch中torch.nn模块的卷积层 文章目录PyTorch深度学习总结前言一、torch.nn模块1. 模块的基本组成部分1.1 层&#xff08;Layers&#xff09;1.2 损失函数&#xff08;Loss Functions&#xff09;1.3 激活函数&#xff08;Activation Functions…

Rust简洁控制流:if let与let else高效编程指南

文章目录Rust简洁控制流&#xff1a;if let与let else高效编程指南&#x1f3af; if let&#xff1a;专注单一匹配场景&#x1f4a1; if let核心优势&#xff1a;&#x1f504; if let与else搭配使用&#x1f680; let else&#xff1a;错误处理与提前返回&#x1f48e; let el…

upload-labs靶场通关详解:第19关 条件竞争(二)

一、分析源代码//index.php // 初始化变量&#xff1a;标记上传状态和错误消息 $is_upload false; $msg null;// 检查是否通过POST方式提交了表单 if (isset($_POST[submit])) {// 引入自定义上传类require_once("./myupload.php");// 生成基于时间戳的文件名&…

一天两道力扣(3)

解法一&#xff1a;class Solution(object):def invertTree(self, root):if not root:return Noneroot.left, root.right root.right, root.leftself.invertTree(root.right)self.invertTree(root.left)return root解析&#xff1a;递归解法二&#xff1a;class Solution(obje…

jenkins2025安装、插件、邮箱发送使用

Tips&#xff1a;卸载从新安装(需要在C盘线先删除.jenkins文件)&#xff0c;然后换个默认浏览器从新安装推荐的插件(不然安装插件这一步会报错&#xff0c;连接不到jenkins) 一、jenkins安装 访问jenkins官网&#xff1a;https://www.jenkins.io/download/ 双击war包开始下载…

vue中通过tabs 切换 时 显示不同的echarts 特殊处理

需要进行特殊处理 比如强制 进行resize 的方法 不然 大小显示会出现问题我先把全部的代码弄上<script setup lang"ts"> import { ref, onMounted, onBeforeUnmount, nextTick } from vue import { useRoute } from vue-router import { message } from ant-des…

浅度解读-(未完成版)浅层神经网络-深层神经网络

文章目录浅层神经网络的前向传播计算流程矩阵在运算时形状的变化激活函数的作用为什么要有激活函数反向传播深层神经网络参数超参数参数初始化初始化权重的值选择浅层神经网络的前向传播 计算流程 #mermaid-svg-tMPs4IUCtqxvhJ24 {font-family:"trebuchet ms",verda…

【vben3源码解读】【useEcharts】【VueUse】详解useEcharts这个hooks的作用与相关库的使用(VueUse)

源代码 import type { EChartsOption } from echarts;import type { Ref } from vue;import type { Nullable } from vben/types;import type EchartsUI from ./echarts-ui.vue;import { computed, nextTick, watch } from vue;import { usePreferences } from vben/preference…

报错 400 和405解决方案

今天出了好多这个错误&#xff0c;Uncaught (in promise) AxiosError {message: Request failed with status code 400 , name: AxiosError , code: ERR_BAD_REQUEST , config: {…}, request: XMLHttpRequest, …}反正就是前后端的参数不匹配&#xff0c;要不就是请求方式不…

Java源码的前端编译

Java源码的前端编译 欢迎来到我的博客&#xff1a;TWind的博客 我的CSDN:&#xff1a;Thanwind-CSDN博客 我的掘金&#xff1a;Thanwinde 的个人主页 0.前言 当一份Java代码写好时&#xff0c;将其进行编译&#xff0c;运行&#xff0c;并不是简单把这个Java源码从头到尾执行…

JWT6报错误 kid empty unable to lookup correct key

JWT5和jwt6在加密和解密和时候还明些区别的 &#xff0c;在5中&#xff0c;是不需要这个kid的&#xff0c;加解都不需要。但6中是需要这个keyId。 所以在使用的时候要做个区别&#xff0c;参考下面链接&#xff1a; ThinkPhp5.0.24 JWT报错 ‘“kid“ empty, unable to lookup…

高效学习之一篇搞定分布式管理系统Git !

一、Git是什么1&#xff0e;Git是目前世界上最先进的分布式版本管理系统 2&#xff0e;工作原理/流程workspace&#xff1a;工作区 Index/Stage&#xff1a;暂存区 Repository&#xff1a;仓库区&#xff08;本地仓库&#xff09; Remote&#xff1a;远程仓库二、SVN和Git的最主…

AdsPower API 新增查询环境 Cookies 接口,自动化更进一步!

你是不是有过这样的经历&#xff1f;账号在 AdsPower 环境中已经成功登录&#xff0c;但你还要花时间手动导出 Cookies、再整理处理&#xff0c;过程繁琐、效率低下。 现在&#xff0c;我们上线了 API 查询环境 Cookies 的接口&#xff0c;支持通过 API 直接获取已登录环境的 …

Craftium游戏引擎中的客户端同步机制解析

Craftium游戏引擎中的客户端同步机制解析 craftium A framework for creating rich, 3D, Minecraft-like single and multi-agent environments for AI research based on Minetest 项目地址: https://gitcode.com/gh_mirrors/cr/craftium 游戏状态同步的核心问题 在分…

spring cloud负载均衡之FeignBlockingLoadBalancerClient、BlockingLoadBalancerClient

本文主要分析被 FeignClient 注解的接口类请求过程中负载均衡逻辑&#xff0c;流程分析使用的源码版本信息如下&#xff1a;<spring-boot.version>3.2.1</spring-boot.version><spring-cloud.version>2023.0.0</spring-cloud.version>背景 平常我们代码…

提示工程(Prompt Engineering)研究进展

提示工程(Prompt Engineering)研究进展 以及它如何帮助大语言模型(LLMs)和视觉语言模型(VLMs)更好地工作。用简单的话说,就是通过设计巧妙的“提示”(比如指令、例子),让模型在不修改内部参数的情况下,更精准地完成各种任务,比如回答问题、推理、生成内容等。 文档…

【ARM】AI开发板A7处理器JTAG实现指南

一、文档背景尽管开发板原厂提供了相关文档&#xff0c;但可能缺乏对 A7 处理器 JTAG 功能的详细说明。这可能会导致以下问题&#xff1a;开发人员难以理解和利用 A7 处理器的基本功能&#xff0c;阻碍调试和开发进度。在进行Uboot移植过程中&#xff0c;无法应用图形界面的调试…

FPGA(一)Quartus II 13.1及modelsim与modelsim-altera安装教程及可能遇到的相关问题

零.前言 在学习FPGA课程时&#xff0c;感觉学校机房电脑用起来不是很方便&#xff0c;想着在自己电脑上下载一个Quartus II 来进行 基于 vhdl 语言的FPGA开发。原以为是一件很简单的事情&#xff0c;没想到搜了全网文章发现几乎没有一个完整且详细的流程教学安装&#xff08;也…

软考(软件设计师)存储管理—存储空间管理,文件共享保护

一、文件存取方法 1. 顺序存取&#xff08;Sequential Access&#xff09; 原理&#xff1a;按记录写入顺序依次访问特点&#xff1a; 读操作&#xff1a;读取当前位置&#xff0c;指针自动前移写操作&#xff1a;追加到文件末尾 适用场景&#xff1a;磁带设备、日志文件 #merm…