vue项目接口域名动态的获取方法
334
2022-06-22
Python中re模块主要功能是通过正则表达式是用来匹配处理字符串的
第一步:import re
导入该模块后,就可以使用该模块下的所有方法和属性
1、正则基本概念
^元字符 以什么开头
import re
str="匹配规则这个字符串是否匹配"
print(re.findall("^匹配规则",str)) #字符串开始位置与匹配规则符合就匹配且打印匹配内容,否则不匹配,返回值是list
打印内容:['匹配规则']
^元字符 如果写到[]字符集里就是反取
import re
str="匹配s规则这s个字符串是否s匹配f规则则re则则则"
print(re.findall("[^a-z]",str)) #反取,匹配出除字母外的字符,返回值是list
D:\study\python\atp\venv\Scripts\python.exe D:/study/python/atp/lib/t.py
['匹', '配', '规', '则', '这', '个', '字', '符', '串', '是', '否', '匹', '配', '规', '则', '则', '则', '则', '则']
$元字符 以什么结尾
import re
str="匹配s规则这s个字符串是否s匹配f规则则re则则则"
print(re.findall("则$",str)) #字符串结束位置与则符合就匹配,否则不匹配,返回值是list
D:\study\python\atp\venv\Scripts\python.exe D:/study/python/atp/lib/t.py
['则']
* 元字符 匹配其前面的一个字符0次或多次
+ 元字符 匹配其前面的一个字符1次或多次
?元字符 匹配其前面的一个字符0次或1次
{}元字符,范围
{m}匹配前一个字符m次,{m,n}匹配前一个字符m至n次,若省略n,则匹配m至无限次
{0,}匹配前一个字符0或多次,等同于*元字符
{+,}匹配前一个字符1次或无限次,等同于+元字符
{0,1}匹配前一个字符0次或1次,等同于?元字符
[]元字符,字符集
需要字符串里完全符合,匹配规则,就匹配,(规则里的 [] 元字符)对应位置是[]里的任意一个字符就匹配
import re
str="匹配s规则这s个字符串是否s匹配f规则则re则则则"
print(re.findall("匹配[s,f]规则",str)) #匹配字符后,只有符合[]中任意字符均可,返回值是list
D:\study\python\atp\venv\Scripts\python.exe D:/study/python/atp/lib/t.py
['匹配s规则', '匹配f规则']
\d 匹配任何十进制数,它相当于类[0-9]
\d+如果需要匹配一位或者多位数的数字时用
\D匹配任何非数字字符,它相当于类[^0-9]
\s匹配任何空白字符,它相当于类[\t\n\r\f\v]
\S匹配任何非空白字符,它相当于类[^\t\n\r\f\v]
\w匹配包括下划线在内任何字母数字汉字字符
\W匹配非任何字母数字汉字字符包括下划线在内
()元字符,分组
也就是分组匹配,()里面的为一个组也可以理解成一个整体
如果()后面跟的是特殊元字符如 (adc)* 那么*控制的前导字符就是()里的整体内容,不再是前导一个字符
import re
str="a3a3ddd"
print(re.search("(a3)+",str).group()) #匹配一个或多个a3
C:\Users\zhaow\AppData\Local\Programs\Python\Python37\python.exe D:/study/python/test/uu.py
a3a3
|元字符,或
|或,或就是前后其中一个符合就匹配
import re
str="a3死a3d有dd"
print(re.findall(r"死|有+",str)) #匹配|前后一个字符均可
C:\Users\zhaow\AppData\Local\Programs\Python\Python37\python.exe D:/study/python/test/uu.py
['死', '有']
r原生字符
将在python里有特殊意义的字符如\b,转换成原生字符(就是去除它在python的特殊意义),不然会给正则表达式有冲突,为了避免这种冲突可以在规则前加原始字符r
模块方法:
match()函数(以后常用)
match,从头匹配一个符合规则的字符串,从起始位置开始匹配,匹配成功返回一个对象,未匹配成功返回None
match(pattern, string, flags=0)
# pattern: 正则模型
# string : 要匹配的字符串
# falgs : 匹配模式
search()函数
search,浏览全部字符串,匹配第一符合规则的字符串,浏览整个字符串去匹配第一个,未匹配成功返回None
search(pattern, string, flags=0)
# pattern: 正则模型
# string : 要匹配的字符串
# falgs : 匹配模式
注意:match()函数 与 search()函数基本是一样的功能,不一样的就是match()匹配字符串开始位置的一个符合规则的字符串,search()是在字符串全局匹配第一个合规则的字符串
findall()函数
findall(pattern, string, flags=0)
# pattern: 正则模型
# string : 要匹配的字符串
# falgs : 匹配模式
浏览全部字符串,匹配所有合规则的字符串,匹配到的字符串放到一个列表中,未匹配成功返回空列表
注意:一旦匹配成,再次匹配,是从前一次匹配成功的,后面一位开始的,也可以理解为匹配成功的字符串,不在参与下次匹配
import re
r=re.findall("\d+\w\d+","a2b3c4d5") #浏览全部字符串,匹配所有合规则的字符串,匹配到的字符串方到一个列表中
print(r)
['2b3', '4d5'] #匹配成功的字符串,不再参与下次匹配,所以3c4也符合规则但是没有匹配到
注意:如果没写匹配规则,也就是空规则,返回的是一个比原始字符串多一位的,空字符串列表
import re
r=re.findall("","a2b3c4d5") #浏览全部字符串,匹配所有合规则的字符串,匹配到的字符串方到一个列表中
print(r)
['', '', '', '', '', '', '', '', ''] #如果没有写匹配规则,也就是空规则,返回的是一个比原始字符串多一位的空字符串列表,如上是8个字符,返回是9个空字符
注意:正则匹配到空字符的情况,如果规则里只有一个组,而组后面是*就表示组里的内容可以是0个或者多过,这样组里就有了两个意思,一个意思是匹配组里的内容,二个意思是匹配组里0内容(即是空白)所以尽量避免用*否则会有可能匹配出空字符串
注意:正则只拿组里最后一位,如果规则里只有一个组,匹配到的字符串里在拿组内容是,拿的是匹配到的内容最后一位
import re
r=re.findall("(ca)*","ca2b3caa4d5") #浏览全部字符串,匹配所有合规则的字符串,匹配到的字符串方到一个列表中
print(r)
['ca', '', '', '', 'ca', '', '', '', '', '']#用*号会匹配出空字符
无分组:匹配所有合规则的字符串,匹配到的字符串放到一个列表中
import re
r=re.findall("a\w+","ca2b3 caa4d5") #浏览全部字符串,匹配所有合规则的字符串,匹配到的字符串方到一个列表中
print(r)
['a2b3', 'aa4d5']#匹配所有合规则的字符串,匹配到的字符串放入列表
有分组:只将匹配到的字符串里,组的部分放到列表里返回,相当于groups()方法
import re
r=re.findall("a(\w+)","ca2b3 caa4d5") #有分组:只将匹配到的字符串里,组的部分放到列表里返回
print(r)
['2b3', 'a4d5']#返回匹配到组里的内容返回
多个分组:只将匹配到的字符串里,组的部分放到一个元组中,最后将所有元组放到一个列表里返
相当于在group()结果里再将组的部分,分别,拿出来放入一个元组,最后将所有元组放入一个列表返回
import re
r=re.findall("(a)(\w+)","ca2b3 caa4d5") #有多分组:只将匹配到的字符串里,组的部分放到一个元组中,最后将所有元组放到一个列表里返回
print(r)
[('a', '2b3'), ('a', 'a4d5')]#返回的是多维数组
分组中有分组:只将匹配到的字符串里,组的部分放到一个元组中,先将包含有组的组,看作一个整体也就是一个组,把这个整体组放入一个元组里,然后在把组里的组放入一个元组,最后将所有组放入一个列表返回
import re
r=re.findall("(a)(\w+(b))","ca2b3 caa4b5") #分组中有分组:只将匹配到的字符串里,组的部分放到一个元组中,先将包含有组的组,看作一个整体也就是一个组,把这个整体组放入一个元组里,然后在把组里的组放入一个元组,最后将所有组放入一个列表返回
print(r)
[('a', '2b', 'b'), ('a', 'a4b', 'b')]#返回的是多维数组
?:在有分组的情况下findall()函数,不只拿分组里的字符串,拿所有匹配到的字符串,注意?:只用于不是返回正则对象的函数如findall()
import re
r=re.findall("a(?:\w+)","a2b3 a4b5 edd") #?:在有分组的情况下,不只拿分组里的字符串,拿所有匹配到的字符串,注意?:只用于不是返回正则对象的函数如findall()
print(r)
['a2b3', 'a4b5']
split()函数
根据正则匹配分割字符串,返回分割后的一个列表
split(pattern, string, maxsplit=0, flags=0)
# pattern: 正则模型
# string : 要匹配的字符串
# maxsplit:指定分割个数
# flags : 匹配模式
sub()函数
替换匹配成功的指定位置字符串
sub(pattern, repl, string, count=0, flags=0)
# pattern: 正则模型
# repl : 要替换的字符串
# string : 要匹配的字符串
# count : 指定匹配个数
# flags : 匹配模式
备注:参考网站 https://cnblogs.com/zjltt/p/6955965.html https://cnblogs.com/xiaokuangnvhai/p/11213308.html
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~