正则表达式和Python中正则的使用

文章目录
  1. 1. 正则表达式的概念和用法
    1. 1.0.1. 参考链接
  2. 1.1. 常用方法
    1. 1.1.1. 贪心和非贪心匹配
  3. 1.2. Python re库
    1. 1.2.1. findall 和serach的区别
    2. 1.2.2. sub的使用
    3. 1.2.3. 不建议使用compile
    4. 1.2.4. 匹配数字
  4. 1.3. python 中正则表达式的使用

正则表达式的概念和用法

多练习,多使用,才能熟练掌握正则表达式

参考链接

######基本概念
在编写处理字符串的程序或者网页时,需要查找某些复杂规则的字符串。
正则表达式: 描述这些规则的工具

####Python 中正则的使用

常用方法
  • findall: 匹配所有符合规律的内容,以列表的方式返回
  • Serch: 匹配并提取第一个符合规律的内容,以正则表达式对象(object)的形式返回
  • Sub: 替换符合规律的内容,返回替换后的值
    贪心和非贪心匹配
  • .* 贪心 匹配尽可能多
    secret_code = 'sdewsexxIxxdefrt12kkxxlovexx33kkxxyouxxkl' ... b = re.findall('xx.*xx',secret_code) print b
    结果:多量少组合
  • .*? 非贪心 匹配尽可能少
    c = re.findall('xx.*?xx',secret_code) print c
    结果:少量多组合

-(.*?) 只返回括号内的数据,与上面不同 重要
d = re.findall('xx(.*?)xx',secret_code) print d for each in d print each
结果为: I love you 只匹配括号中即xx xx中间的字符

Python re库

re.py源文件 就是Python 正则表达式的源码介绍
s = '''sdfxxhello xxfsdfxxworldxxasdf''' d = re.findall('xx(.*?)xx',s,re.S) print d 结果: ['hello\n','world'] **re.S:表示包含换行符的任意字符** 没有则输出:fsdf

findall 和serach的区别

s2 = 'asdfxxIxx123xxlovexxdfd' f = re.search('xx(.*?)xx123(.*?)xx',s2).group(1) print f
结果是: I
f = re.search('xx(.*?)xx123(.*?)xx',s2).group(2) print f 结果是: love
group代表我们匹配的括号有几个

f2 = re.findall('xx(.*?)xx123(.*?)xx',s2) print f2[0][1]
f2在断点中调试为: f2={list}[('I','love')] 0={tuple}('I','love')
print结果是: love

findall: 匹配所有符合的内容,返回的是list

search: 匹配的是第一个符合的内容,返回的是object
确定只有一个内容的时候,使用search方法可以提高效率

sub的使用

s = '123abcdsdffrerg123' se = re.sub('123(.*?)123','456789123',s) print se result : 456789123
analyse: 123和123之间包围的 用了括号只返回括号中内容

不建议使用compile

compile 是先进行编译 在进行匹配
源码中 def compile中也有compile 多此一举
pattern = 'xx(.*?)xx' new_pattern = re.compile(pattern,re.S) output = re.findall(new_pattern,secret_code) print output

匹配数字

a = 'asdfasf1234567fasd555fas' b = re.finall('(/d+)',a) print b result: ['1234567','555']
‘(/d+)’表示只返回括号中的内容一定要学会使用

python 中正则表达式的使用
  • 使用findall与serach从大量文本中匹配感兴趣的内容(先抓大再抓小技巧)
  • 使用sub实现换页功能
分享到 评论