600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > vb.net 正则 替换 第n个_Python中正则表达式模块详解

vb.net 正则 替换 第n个_Python中正则表达式模块详解

时间:2021-05-11 14:16:16

相关推荐

vb.net 正则 替换 第n个_Python中正则表达式模块详解

作者:python来源:SegmentFault 思否社区正则表达式用来处理字符串,对字符串进行检索和替换,另外正则在python爬虫的应用也是相当广泛!特点灵活性、逻辑性和功能性非常强可以迅速地用极简单的方式达到字符串的复杂控制

正则语法

`#1、数字和字母都表示它本身,.表示匹配除了换行以外的任意字符,.表示匹配.

#2、很多字母前面添加会有特殊含义

-n:换行

- t:制表符

-d:匹配数字,等价[0-9]

-D:非数字,等价于[^0-9]

-w:表示数字、字母以及下划线,中文,等价于[0-9a-zA-Z_]

- W:表示w取反

-s:表示任意的非打印字符(空格、换行、制表符)

-S:表示非空白字符

#3、绝大多数标点都有特殊含义

-():用来表示一个分组,如果需要表示括号,需要使用

-[]:匹配范围,[0-9]表示0~9范围中的一个,[0-9a-zA-Z]

-|:表示或者的意思re.search(r'f(x|y|z)m','pdsfxm')匹配fxm

-{},{2,},{,3},{1,3}:用来限定前面元素出现的次数re.search(r'go{2}d','good')

-*:表示前面的元素出现的次数为0次及以上,等价于{0,}

-+:表示前面的元素出现的次数为1次及以上,等价于{1,}

-^:以指定的内容开头,或者取反的意思

-$:以指定的内容结尾

#4、?的两种用法

-规定前面元素出现的次数最多只能出现1次,等价于{,1}

-将贪婪模式转换为非贪婪模式(重点)`

re模块的介绍

XM返佣 /brokerlist/xm.html该模块是python中专门用于处理正则的默认,提供了相关的方法

常用方法

match、search 只查询一次

finditer 查找到所有的匹配数据放到一个可迭代对象中

findall 把查找到的所有字符串结果放到一个列表中

fullmatch 完全匹配,字符串需要满足正则表达式

Match类的使用

调用re.match,re.search或者对re.finditer的遍历返回的对象都是re.Match对象

Match类的属性和方法

pos、endpos 被查找字符串的起始和终端位置span( ) 匹配到的下标位置(元组)group 分组的概念

`importre

m=re.search(r'c.*z','abcdefgz')

print(m.pos)#0

print(m.endpos)#8

print(m.span())#(2,8)

#使用group获取获取到匹配的字符串

print(m.group())#cdefgz

#group表示正则表达式的分组

#1、在正则表达式里使用()表示一个分组

#2、如果没有分组,默认只有一组

#3、分组的下标从0开始

#这里有4个分组

m1=re.search(r'(1.*)(2.*)(3.*4)','a1bcd2efgh3ij4k')

print(m1.group())#默认就是第0组1bcd2efgh3ij4

print(m1.group(0))#第0组就是把整个正则表达式当做一个整体1bcd2efgh3ij4

print(m1.group(1))#1bcd

print(m1.group(2))#2efgh

print(m1.group(3))#3ij4

#groups()将分组以元组的形式返回

print(m1.groups())#('1bcd','2efgh','3ij4')

#(?P表达式)给分组取个名字

m2=re.search(r'(?P1.*)(?P2.*)(?P3.*4)','a1bcd2efgh3ij4k')

print(m2.groupdict())#{'one':'1bcd','two':'2efgh','three':'3ij4'}`

compile在re模块,可以使用re.方法调用函数,还可以调用pile得到一个对象

`importre

#这两种写法没有区别

m=re.search(r'm.*a','111m22222a')

print(m)#

m2=pile(r'm.*a')

result=m2.search('111m22222a')

print(result)#`

正则修饰符

正则修饰符是对表达式进行修饰re.I 使匹配对大小写不敏感re.M 多行匹配,影响 ^ 和$re.S 使 . 匹配包括换行在内的所有字符

`importre

#.表示除了换行以外的任意字符

x=re.search(r'm.*a','abcdmonxxxa')

print(x)#None

#re.S匹配换行

y=re.search(r'm.*a','abcdmonxxxa',re.S)#让.匹配换行

print(y)

a=re.search(r'x','helloXyz')

print(a)#None

#re.I忽略大小写

b=re.search(r'x','helloXyz',re.I)

print(b)#

#re.M让$匹配到换行

m=re.findall(r'w+$','iamboynyouaregirlnheisman')

print(m)#['man']

n=re.findall(r'w+$','iamboynyouaregirlnheisman',re.M)

print(n)#['boy','girl','man']`

正则替换

sub

`importre

#把数字替换成x

m=re.sub(r'd','x','hello123wor123ld')

print(m)#helloxxxworxxxld

n=re.sub(r'd+','x','hello123wor123ld')

print(n)#helloxworxld

#需求:将p中内容的数字乘2

p='hello50good34'

deftest(x):

y=int(x.group(0))

y*=2

returnstr(y)#这里只能以字符串的形式返回

print(re.sub(r'd+',test,p))#hello100good68`

贪婪模式与非贪婪模式

在正则表达式里,默认采用的是贪婪模式,尽可能匹配多的字符串 在贪婪模式后面添加?,可将贪婪模式转化为非贪婪模式

importre

m=re.search(r'm.*a','abcm123a456a')

print(m)# m123a456a,这里为什么不是m123a呢?因为这里默认使用的贪婪模式

n=re.search(r'm.*?a','abcm123a456a')

print(n)#m123a使用?将贪婪模式转化为非贪婪模式

#?

print(re.match(r'aa(d+)','aa123bb456').group(1))#123

print(re.match(r'aa(d+?)','aa123bb456').group(1))#1

print(re.match(r'aa(d+?)','aa123bb456').group(0))#aa1

#虽然说是尽可能少的匹配,但也要满足匹配呀

print(re.match(r'aaa(d+)ddd','aaa2333ddd').group(0))#aaa2333ddd

print(re.match(r'aaa(d+?)ddd','aaa2333ddd').group(1))#2333

print(re.match(r'aaa(d+).*','aaa2333ddd').group(0))#aaa2333ddd

print(re.match(r'aaa(d+?).*','aaa2333ddd').group(1))#2

-END -

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。