这里有新鲜出炉的 Python3 Cookbook 中文版,程序狗速度看过来!
Python 是一种面向对象、解释型计算机程序设计语言,由 Guido van Rossum 于 1989 年底发明,第一个公开发行版发行于 1991 年。Python 语法简洁而清晰,具有丰富和强大的类库。它常被昵称为胶水语言,它能够把用其他语言制作的各种模块(尤其是 C/C++)很轻松地联结在一起。
这篇文章主要介绍了 Python 正则表达式, 结合具体实例形式归纳总结了 Python 正则表达式中常用的各种函数与相关使用技巧, 需要的朋友可以参考下
本文实例总结了 Python 正则表达式基本用法。分享给大家供大家参考,具体如下:
正则表达式在平时做文本处理(爬虫程序去解析 html 中的字段,在分析 log 文件的时候需要抓取一些关键数据)的时候经常会用到。一般我们会使用到 Python 的 re 库。如果正则表达式自己代码中反复被用到的时候,我们可以将这个正则表达式使用 re.compile 函数转换成一个 object 方便调用。
match
将输入的字符串从第一个字符开始匹配,如果不匹配将会直接返回空。
search
和 match 不同,search 能自由的在字符串中任一开始位置开始匹配,直到匹配上了。
re 中的选项
通常在 flag 里面可以设置.
忽略掉大小写
- re.I
让 \ w,\W,\b,\B,\s 和 \ S 做本地化识别
- re.L
当匹配的时候支持多行匹配.
- re.M
显示正则表达式的调试信息
- re.DEBUG
让. 号匹配本行的全部字符。
- re.S
sub 替换
- import re phone = '188-88-88 # this is my phone number'num = re.sub(r '#.*$', '', phone)#num == 188 - 88 - 88 num = re.sub(r '\D', '', phone)#num = 1888888
还能使用这个来做代码的转义,有点像在 sublime text 里面使用的查找替换。比如说我需要将 C 语言里面的宏定义转换成 lua 里面的变量定义
- import re print(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()'''
- 66
- 88
- 88
- 777
- '''
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')#result 1234\\@gmai\\.com
备注语法:
模式 | 描述 |
---|---|
^ | 匹配字符串的开头 |
$ | 匹配字符串的末尾。 |
. | 匹配任意字符,除了换行符,当 re.DOTALL 标记被指定时,则可以匹配包括换行符的任意字符。 |
[…] | 用来表示一组字符, 单独列出:[amk] 匹配'a','m'或'k' |
[^…] | 不在 [] 中的字符:[^abc] 匹配除了 a,b,c 之外的字符。 |
re* | 匹配 0 个或多个的表达式。 |
re+ | 匹配 1 个或多个的表达式。 |
re? | 匹配 0 个或 1 个由前面的正则表达式定义的片段,非贪婪方式 re{n} |
re{n,} | 精确匹配 n 个前面表达式。 |
re{n, m} | 匹配 n 到 m 次由前面的正则表达式定义的片段,贪婪方式 a |
(re) | G 匹配括号内的表达式,也表示一个组 |
(?imx) | 正则表达式包含三种可选标志:i, m, 或 x 。只影响括号中的区域。 |
(?-imx) | 正则表达式关闭 i, m, 或 x 可选标志。只影响括号中的区域。 |
(?: re) | 类似 (…), 但是不表示一个组 |
(?imx: re) | 在括号中使用 i, m, 或 x 可选标志 |
(?-imx: re) | 在括号中不使用 i, m, 或 x 可选标志 |
(?#…) | 注释. |
(?= re) | 前向肯定界定符。如果所含正则表达式,以 … 表示,在当前位置成功匹配时成功,否则失败。但一旦所含表达式已经尝试,匹配引擎根本没有提高;模式的剩余部分还要尝试界定符的右边。 |
(?! re) | 前向否定界定符。与肯定界定符相反;当所含表达式不能在字符串当前位置匹配时成功 |
(?> re) | 匹配的独立模式,省去回溯。 |
\w | 匹配字母数字 |
\W | 匹配非字母数字 |
\s | 匹配任意空白字符,等价于 [\t\n\r\f]. |
\S | 匹配任意非空字符 |
\d | 匹配任意数字,等价于 [0-9]. |
\D | 匹配任意非数字 |
\A | 匹配字符串开始 |
\Z | 匹配字符串结束,如果是存在换行,只匹配到换行前的结束字符串。c |
\z | 匹配字符串结束 |
\G | 匹配最后匹配完成的位置。 |
\b | 匹配一个单词边界,也就是指单词和空格间的位置。例如, 'er\b' 可以匹配 "never" 中的'er',但不能匹配 "verb" 中的'er'。 |
\B | 匹配非单词边界。'er\B' 能匹配 "verb" 中的'er',但不能匹配 "never" 中的'er'。 |
\n, \t, 等. | 匹配一个换行符。匹配一个制表符。等 |
\1…\9 | 匹配第 n 个分组的子表达式。 |
\10 | 匹配第 n 个分组的子表达式,如果它经匹配。否则指的是八进制字符码的表达式。 |
希望本文所述对大家 Python 程序设计有所帮助。
来源: http://www.phperz.com/article/17/0717/335741.html