首页 > 编程 > Python > 正文

Python正则表达式经典入门教程

2020-02-16 01:34:05
字体:
来源:转载
供稿:网友

本文实例总结了Python正则表达式基本用法。分享给大家供大家参考,具体如下:

正则表达式在平时做文本处理(爬虫程序去解析html中的字段,在分析log文件的时候需要抓取一些关键数据)的时候经常会用到。一般我们会使用到Python的re库。如果正则表达式自己代码中反复被用到的时候,我们可以将这个正则表达式使用re.compile函数转换成一个object方便调用。

match

将输入的字符串从第一个字符开始匹配,如果不匹配将会直接返回空。

search

和match不同,search能自由的在字符串中任一开始位置开始匹配,直到匹配上了。

re中的选项

通常在flag里面可以设置.

re.I 忽略掉大小写
re.L 让/w,/W,/b,/B,/s和/S做本地化识别
re.M 当匹配的时候支持多行匹配.
re.DEBUG 显示正则表达式的调试信息
re.S 让.号匹配本行的全部字符。

sub 替换

import rephone='188-88-88 # this is my phone number'num = re.sub(r'#.*$','',phone)# num ==188-88-88num = re.sub(r'/D','',phone)# num = 1888888

还能使用这个来做代码的转义,有点像在 sublime text里面使用的查找替换。比如说我需要将C语言里面的宏定义转换成lua里面的变量定义

import reprint( re.sub( r'#define/s+([a-zA-Z_]+)/s+([a-zA-Z_0-9]+)', r'_G./1 = /2', '#define MAX_RECV_SIZE 100' ) )#_G.MAX_RECV_SIZE = 100

subn函数类似,只是能定制替换的次数。

findall

将匹配到的内容返回成一个数组,这个应该是比较常用的方法。

print( re.findall( '/d+', '66,88,88,777' ) )# ['66', '88', '88', '777']

finditer

匹配的内容以迭代器的方式返回,我们可以对这个做循环,返回的时候MatchObject

for num in re.finditer( '/d+', '66,88,88,777' ): print num.group()'''668888777'''

split

re.split(pattern, string, maxsplit=0, flags=0) >>> re.split(',', 'Words, words, words.')['Words', ' words', ' words.']>>> re.split('/W+', 'Words, words, words.')['Words', 'words', 'words', '']>>> re.split('(/W+)', 'Words, words, words.')['Words', ', ', 'words', ', ', 'words', '.', '']

大写的/W表示了非字串,这个在语法里面可以查到。如果加了括号,将不会省略掉匹配到的split的字串。最后这个在数组中作为字串分隔符的,.都被保留在数组中了。

escape

这个函数是一个辅助函数,当大量编写正则表达式的时候,可能我们固定的一些字串中包含了正则的保留字串,但是我们不需要让程序当它是re表达式的时候,可以使用这个函数将字串做转换。

re.escape('1234@gmail.com')# result1234//@gmai//.com            
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表