正则表达式(re模块)

一:re.search(patten,string,flags)

import re

pat="abc"
str="qweabcopdabckk"

res=re.search(pat,str)
print(res)
print(type(res))
<_sre.SRE_Match object; span=(3, 6), match='abc'>
<class '_sre.SRE_Match'>

  可以看出search方法会返回一个对象(_sre.SRE_Match类的实例对象),并且只会匹配一次正则表达式(当匹配成功之后,就不会继续向后匹配)。

二:re.compile(patten,flags)

import re

pat="abc"
str="qweabcopdabckk"

res=re.compile(pat)
print(type(res))
<class '_sre.SRE_Pattern'>

  该方法会返回一个_sre.SRE_Pattern的实例对象。

三:findall(string)

import re

pat="abc"
str="qweabcopdabckk"

res=re.compile(pat).findall(str)
print(res)
print(type(res))
['abc', 'abc']
<class 'list'>

  该方法会返回一个list对象,且list对象的每一个元素都是正则表达式所匹配的一个结果。

四:re.match(patten,string,flags)和re.fullmatch(patten,string,flags)

import re

pat="abc"
str="abcopdabckk"
str1="abc"
res=re.match(pat,str)
res1=re.fullmatch(pat,str1)

print(res)
print(type(res))

print(res1)
print(type(res1))
<_sre.SRE_Match object; span=(0, 3), match='abc'>
<class '_sre.SRE_Match'>
<_sre.SRE_Match object; span=(0, 3), match='abc'>
<class '_sre.SRE_Match'>
re.match()方法只匹配位于字符串开始位置的模式串,re.fullmatch()方法会返回一个和模式串完全匹配的字符串。

贪婪模式和非贪婪模式:

  非贪婪模式:*?、+?、??、{ m,n}?

  除了非贪婪模式的几种方式外,都是贪婪模式(贪婪模式是默认的)。例子如下:

import re
pat1="a(\d+)b"
pat="a(\d+?)b"
str="a23ba"

res=re.compile(pat).findall(str)
res1=re.compile(pat1).findall(str)

print(res)
print(res1)
['23']
['23']
import re
pat1="a(\d+)"
pat="a(\d+?)"
str="a23ba"

res=re.compile(pat).findall(str)
res1=re.compile(pat1).findall(str)

print(res)
print(res1)
['2']
['23']

区别括号和双括号:

import re

string="abcdefg  acbdgef  abcdgfe  cadbgfe"

#带括号与不带括号的区别
#不带括号
regex=re.compile("((\w+)\s+\w+)")
print(regex.findall(string))

regex1=re.compile("(\w+)\s+\w+")
print(regex1.findall(string))

regex2=re.compile("\w+\s+\w+")
print(regex2.findall(string))
[('abcdefg  acbdgef', 'abcdefg'), ('abcdgfe  cadbgfe', 'abcdgfe')]
['abcdefg', 'abcdgfe']
['abcdefg  acbdgef', 'abcdgfe  cadbgfe']
  第一个 regex 中是带有2个括号的,我们可以看到其输出是一个list 中包含2个 tuple 

  第二个 regex 中带有1个括号,其输出的内容就是括号匹配到的内容,而不是整个表达式所匹配到的结果。

  第三个 regex 中不带有括号,其输出的内容就是整个表达式所匹配到的内容。
 (注:参考 点击打开链接



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值