Python中的正则表达式用法

1.什么是正则表达式

正则表达式可以使我们通过编程的方式让计算机具备在文本中检索某种模式的能力,是由一些字符和特殊符号组成的字符串,他们能够匹配多个字符串。这些特殊符号和字符就是元字符,正式它给予了 正则表达式灵活性。
例如 . 匹配除\n的任意一个字符

  • 匹配0次或则多次前面出现的正则表达式
    这些元字符就不在这里过多赘述,百度一下正则表达式会有元字符大全,写的很详细,小伙伴们可以先科普一下,再看博文这样更好理解。我们主要介绍python中如何使用正则表达式。

2.Python中如何支持正则表达式
pyhton通过标准库的re模块来支持正则表达式。

#encoding=utf-8
import  re

#match方法:  从字符串的起始部分对模式进行匹配,如果成功返回匹配对象,不成功则返回None
def printf(m):
    if m is not None:
        print m.group()
m = re.match('foo','foo ')
printf(m)  #foo

#search方法: 在任意位置对给定的正则表达式模式搜索第一次出现的匹配情况,搜索成功返回匹配对象
#否则返回None   ,第三个参数是常用属性。
#search(pattern, str, flag=0)
t=re.search('foo','my Food',re.I)
printf(t)   #foo


#匹配多个字符串    \
bt= 'bat|bet|bit'
m=re.match(bt,'bat')
printf(m)   #bat

#匹配任意单个字符   .  (除\n)
#而对于真正的.  则需  patten = '3\.14'

anyend = '.end'
m = re.match(anyend,'bend')
printf(m)  #bend

#创建字符集;
m = re.match('[cr][23][dp][o2]','c3po')
printf(m) #c3op


#重复,特殊字符以及分组
#\w 任意字母或者数字   + 匹配前面一次或多次    ?匹配前面0或1次    ()用于获取子组。
patt = '\w+@(\w+\.)?\w+\.com'
s=re.match(patt,'nobody@xxx.com')
printf(s)   #nobody@xxx.com


m= re.match('(\w\w\w)-(\d\d\d)','abc-123')
print m.group(2)  #123    获取子组 , 一个()是一个,
print m.groups()  #('abc','123')   把所有自主放到一个元组里。
#group()可以获取整个匹配对象,也可以获取指定子组, groups() 获取全部子组。

#匹配字符串的起始和结尾以及单词边界。
m = re.search('^The','The end.')
printf(m)  #The

m = re.search(r'\bthe','bite the car ')
printf(m)  #the
m = re.search(r'\bthe\b','bite thecar ')
printf(m)  #不匹配。    \B 不在边界。

#findall  sub  subn split
#findall 查询字符串中某个正则表达式模式全部的非重复出现情况,  与match和search不同的是,findall()
#总返回一个列表,如果没有匹配成功返回一个空列表,如果匹配成功,返回所有匹配成功的部分

s=re.findall('car','carrry the barcardi to the car ')
print s   #['car', 'car', 'car']
#findall 没有子组的时候则返回全部, 有子组,只返回字组的内容。
s=re.findall('(\d\d\d)-(\w\w\w)','222-rrr333-ttt')
print s   #[('222', 'rrr'), ('333', 'ttt')]
#finditer()  在匹配对象中迭代  这个匹配对象与前面的不一样,这个需要进行迭代。next

s = 'This and that.'
m = re.finditer(r'(th\w+) and (th\w+)',s,re.I)
print m.next().group()  #This and that

#sub()和subn()搜索与替换。
#都是将某字符串中所有匹配正则表达式的部分进行某种形式的替换,用来替换的部分通常是一个字符串。
#subn 返回一个含有两个元素的元组, (替换后的字符串,替换总数)
#sub(pattern, repl, str count=0) 使用repl来替换所有正则表达式的模式在字符串中出现 的位置。
#除非定义count,否则就把所有的都替换,
print re.sub('X',"B",'atten:X # X') #atten:B # B
print re.subn('X',"B",'atten:X # X')

#除了group()可以取出分组外,还可以用\N来取出分组,
s=re.sub(r'(\d{1,2})/(\d{1,2})/(\d{2}|\d{4})',r'\2/\1/\3','2/20/1991')
print s   #20/2/1991

#split()分割字符串
s = re.split(':','str1:str2:str3')
print s  #['str1', 'str2', 'str3']





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值