做下载网站,网站搭建免费软件,传统网站建设架构,番禺做网站最便宜的哪家公司前言#xff1a;前面介绍了关于JS逆向所需的基本知识#xff0c;比如前端三件套等#xff0c;从这里开始就要进入到数据分析的范围内了#xff0c;当然对于一些小白而言一些基本的知识还是需要知道的#xff0c;比如正则#xff0c;XPATNY与BS4#xff1b;三个内容用三篇…前言前面介绍了关于JS逆向所需的基本知识比如前端三件套等从这里开始就要进入到数据分析的范围内了当然对于一些小白而言一些基本的知识还是需要知道的比如正则XPATNY与BS4三个内容用三篇博文来详细介绍一下与JS开发者共同学习与突破本篇文章先介绍一下正则表达式。 正则表达式
Regular Expression译作正则表达式或正规表示法表示有规则的表达式意思是说描述一段文本排列规则的表达式。正则表达式并不是Python的一部分。而是一套独立于编程语言用于处理复杂文本信息的强大的高级文本操作工具。正则表达式拥有自己独特的规则语法以及一个独立的正则处理引擎我们根据正则语法编写好规则(模式)以后引擎不仅能够根据规则进行模糊文本查找还可以进行模糊分割替换等复杂的文本操作能让开发者随心所欲地处理文本信息。正则引擎一般由编程语言提供操作像python就提供了re模块或regex模块来调用正则处理引擎。
正则表达式在处理文本的效率上不如系统自带的字符串操作但功能却比系统自带的要强大许多
最早的正则表达式来源于Per语言后面其他的编程语言在提供正则表达式操作时基本沿用了Per语言的正则语法所以我们学习python的正则以后也可以在javaphpgojavascriptsql等编程语言中使用。
正则对字符串或文本的操作无非是分割、匹配、查找和替换。
在线测试工具 正则表达式在线测试 - 站长工具
import res tools_chaina|||12213132_astrustret re.findall([a-z],s) #其中第一个参数是元字符 共有大概十几个
print(ret)
1元字符
元字符是具有特殊含义的字符 下面是一些元字符的使用的方法与代码实例
import rere.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,123abc163.com,....234xyzqq.com)ret4 re.findall((?:\w)163\.com,123abe163.com234xy20gco)
ret5 re.findall(\w(?:qq|163)\.com,123abc163.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(rna,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,stringmaxsplit0flags0) split() #函数返回一个列表对字符串进行正则分割。
import re
txt:my name is moluo
ret re.split(\stxt)
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,stringcount0flags0) 返回匹配后的结果 def subn(pattern,repl,string,count0flags0) 返回匹配后的结果和次数 # sub()函数用选择的文本替换匹配:
# 找到第一个空白字符并进行替换
import re
txt myname is yuan
ret re.sub(r\s,lei,txt,1)
print(ret)2.3 search ret re.search(r(?Ptel1[3-9]\d{9}).*?(?Pemail\dqq\.com),我的手机号码是13928835900,我的QQ号码是232324qq.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号码是232324qq.com)
print(ret)
2.5 complie
1. 预编译正则表达式模式
re.compile 允许你将一个正则表达式字符串编译成一个正则表达式模式对象Pattern object。这样做的好处是如果你需要多次使用同一个正则表达式模式进行匹配编译一次后再多次使用可以提高效率。
2. 提高匹配效率
当你需要频繁使用同一个正则表达式进行匹配时预编译可以显著提高性能。这是因为每次使用正则表达式时Python 都需要先解析字符串然后进行匹配。通过预编译可以避免重复解析字符串从而加快匹配速度
#(6)compile 编译
s112 apple 34 peach 77 banana
ret re.findall(r\d,s1)
print(ret)
s222 apple 33 peach 44 banana
ret re.findall(r\d,s2)
print(ret)reg re.compile(r\d)
print(reg.findall(s1)) 未完待续。。。