简介
正则表达式是一种用来匹配字符串的强有力的武器。它的设计思想是用一种描述性的语言来给字符串定义一个规则,凡是符合规则的字符串,我们就认为它 “匹配” 了,否则,该字符串就是不合法的。
re 模块
Python 自1.5版本起增加了 re 模块,它提供 Perl 风格的正则表达式模式。 re 模块使 Python 语言拥有全部的正则表达式功能。
模式 | 描述 |
---|
. | 可以匹配任意单个字符除了 \n |
* | 匹配前一个字符0次或者n次 |
? | 匹配前一个字符0次或者1次 |
^ | 表示匹配的字符必须在最前面 |
$ | 表示匹配的字符必须在最后面 |
+ | 表示匹配前一个字符1次或者n次 |
\d+ | 匹配数字 |
\d | 匹配单个数字 |
.* | 贪心算法,提取最多的内容 |
.*? | 非贪心算法,提取内容 |
x\ | y |
[abc] | 表示匹配 abc 当中的任意一个字符,可以使用连接符- :例如 [a-z] |
[^abc] | 表示匹配除了列出字符以外的所有字符,是[abc]的补集 |
{n} | 表示匹配前面n个字符 |
{n,} | 表示匹配至少n个前面的字符 |
{n, m} | 表示匹配至少n个最多m个前面的字符 |
使用括号的话,括号内的是返回的结果。
re 函数
re.S : 正则匹配的时候包括 \n
findall() : 返回匹配的所有结果列表
search() : 返回匹配到的第一个结果
sub() : 替换匹配的结果
compile() : 把正则表达式编译为正则表达式对象
例子
import re secret_code = 'hadkfalifexxIxxasdasdaxxsdasdxxasadasdaxxsdaxxs'
a = 'xz123' b = re.findall('x.', a)
a = 'xyxy123' b = re.findall('x*', a)
a = 'xyx123' b = re.findall('x?', a)
b = re.findall('xx.*xx', secret_code)
b = re.findall('xx.*?xx', secret_code)
b = re.findall('xx(.*)xx', secret_code)
b = re.findall('xx(.*?)xx', secret_code)
secret_code = '''hadkfalifexxIxxasdasdaxxs dasdxxasadasdaxxsdaxxs''' b = re.findall('xx(.*?)xx', secret_code) b = re.findall('xx(.*?)xx', secret_code, re.S)
b = re.findall('xx(.*?)xx', secret_code) b = re.search('xx(.*?)xx(.*?)xx', secret_code).group(2)
b = re.sub('xx(.*?)xx(.*?)xx', "123%d123", secret_code) b = re.sub('xx(.*?)xx(.*?)xx', "123%d123" % 789, secret_code)
pattern = 'xx(.*?)xx' new_pattern = re.compile(pattern, re.S) b = re.findall(new_pattern, secret_code)
a = 'asdasd123123vvvdsdfsd76989aowoie' b = re.findall('(\d+)', a)
|
参考资料