python之正则表达式系列一——元字符

正则表达式的库在re库里。

findall

re.findall('string ',string S) 匹配字符串,当S中有前面字符串的内容,就返回一个列表,列表包含前面的字符串。

import re
s='hello world'
r=re.findall('hello',s)
print(r)

结果:
在这里插入图片描述

元字符:. ^ $ {} * + ? | []

  • "." 通配符 只拿除了‘\n \r’即换行和回车不能返回,其他字符串均以单个字符返回。
import re
s='test123\n'
r=re.findall('.',s)
print(r)

结果
在这里插入图片描述
如果想拿到‘\n\r’的话,要在findall后面加修饰符‘re.S

s='test123\n'
r=re.findall('.',s,re.S)//注意加了re.S
print(r)

在这里插入图片描述

  • ‘^’ 脱字符 ^string 表示匹配该行的字符串是否已string开头,是的话就返回string的列表,不是的话返回空列表。
s='test123\nTest123\ntest'
r=re.findall('^test',s)
print(r)

在这里插入图片描述
如果实现多行匹配的话,需要在findall后面加修饰符‘re.M

s='test123\nTest123\ntest'		//注意这里有两个换行,实际上是三行字符串
r=re.findall('^test',s,re.M)
print(r)

在这里插入图片描述
如果想不区分大小写的话也需要加修饰符‘re.I’,同时又想多行匹配,所以需要在两个修饰符之间加‘|’分隔开。

s='testing\nTest\ntest'
r=re.findall('^test',s,re.M | re.I)
print(r)

在这里插入图片描述

  • ‘$’ 结束位置 与^相对, string $表示匹配字符串是否以string结尾,是的话返回string列表,不是返回空列表。
    ps:这里的字符串是指包括\n在内的整个字符串,这一点与**^脱字符**不相同。
s='testing\nTest\ntest'
r=re.findall('testing$',s)
print(r)

很明显会返回空列表,因为字符串以‘test’结尾。
在这里插入图片描述
如果想实现多行匹配,即将有\n的字符串看成多个字符串的话,需要加修饰符re.M

s='testing\nTest\ntest'
r=re.findall('testing$',s,re.M)
print(r)

在这里插入图片描述

  • ‘* + ? ’ 这三个一起讲,这三个都是表示匹配次数的。 其中 ‘ * ’表示匹配任意次(0~n);‘+’ 匹配(1 ~ n)次;‘?’
    匹配(0~1)次
    ‘*’的例子
s='z\nzo\nzoo'
r=re.findall('zo*',s,re.M) 		//注意多行匹配
print(r)

这个代码表示,z开头,紧接着o,但是o出现的次数是任意的,符合这样的标准才会返回到列表里。
在这里插入图片描述
‘+’的例子

s='z\nzo\nzoo'
r=re.findall('zo+',s,re.M)
print(r)

在这里插入图片描述
‘?’的例子

s='z\nzo\nzoo'
r=re.findall('zo?',s,re.M)
print(r)

注意这里第三个zoo其实也满足要求,但是只会取zo,因为第二个o不满足要求。
在这里插入图片描述
这里举个对比的例子

s='z\nzo\nzoo'
r=re.findall('zoo?',s,re.M)		//注意这里是zoo?
print(r)

在这里插入图片描述

  • ‘{}’ 重复元字符 与上面三个类似,是控制匹配表达式次数的
s='z\nzo\nzoo'
r=re.findall('zo{0,}',s,re.M)  		 #与re.findall('zo*',s,re.M)一样
print(r)
r=re.findall('zo{1,}',s,re.M)  		 #与re.findall('zo+',s,re.M)一样
print(r)
r=re.findall('zo{0,1}',s,re.M) 	  #与re.findall('zo?',s,re.M)一样
print(r)
r=re.findall('zo{2}',s,re.M)
print(r)

注意{}里面没有空格!

在这里插入图片描述
在这里插入图片描述

  • ‘[ ]’ 字符组 控制的是匹配内容
    会匹配字符串,将里面出现在[]里的内容匹配一下,出现了就返回到列表里。
    如果想要匹配[]比如e到o之间的字母,可以在字母之间加‘-’来表示。
    如果‘^’放在了[]里面,表示除了[]里面的字母或字符外其他的字母或字符匹配,类似于取反了。
s='test\ntesting\nzoo'
r=re.findall('[eio]',s,re.M)
print(r)
r=re.findall('[e-o]',s,re.M)		//efghijklmno
print(r)
r=re.findall('[^eio]',s,re.M)	
print(r)
  • ‘|’ 选择元字符 它会在|前后的字符串进行匹配,匹配到的返回到列表里。
s='z\nzood\nfood'
r=re.findall('z|food',s,re.M)
print(r)
r=re.findall('[z|f]ood',s,re.M)
print(r)

在这里插入图片描述

  • ‘()’分组元字符 将()内的表达式定义为组,返回值是()里面整体匹配后的内容,而且只管()里的匹配。
s='z\nzood\nfood'
r=re.findall('[z|f](o*)',s,re.M)
print(r)

不管[z|f]了,只管后面的(o*)
在这里插入图片描述

  • ‘\’ 转义元字符
    如果想取消字符串的转义,需要在字符串前面加r
    如果想取消正则语法的转义,需要加\
s=r'z\nzood\nfood'						//字符串转义
r=re.findall('[z|f](o\*)',s,re.M)		//正则语法转义
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值