python正则表达式中最常用的就是re。
import re
表达式 | 说明 |
---|---|
. | 匹配所有字符串,除\n以外 |
- | 表示字符范围如[0-9],[a-z]等等 |
* | 匹配前面的子表达式多次。要匹配 * 字符,需要转义 |
+ | 匹配前面的子表达式多次。要匹配 +字符,需要转义 |
^ | 匹配以某个字符串开头的内容。如^ab |
$ | 匹配以某个字符串结尾的内容。如ab$ |
\ | 转义字符 |
? | 匹配前一个字符串0次或1次 |
{m} | 匹配m次 |
{n,m} | 匹配前一个字符n到m次 |
\d | 匹配数字 |
\D | 匹配非数字,等价于[^0-9] |
\w | 匹配字母和数字,等价于[A-Za-z0-9] |
\W | 匹配非英文字母和数字,等价于[^A-Za-z0-9] |
\s | 匹配空白字符,如 \t、 \n |
\S | 匹配非空白字符 |
[] | 定义匹配的字符范围。如 [a-zA-Z0-9] |
a|b | 匹配的字符为a或者b |
() | 匹配括号内的任意表达式 |
编译正则表达式模式
re.compile(pattern, flags=0)¶
这里面的pattern就是你需要匹配的模式可以借鉴上面表中进行组合。这里的flags表示匹配的附加条件:
flags | Value |
---|---|
re.DEBUG | 显示编译模版的信息 |
re.I | 忽略大小写 |
re.L | 本地化识别 |
re.M | 多行匹配 |
re.S | 让 ‘.’ 特殊字符匹配任何字符,包括换行符;如果没有这个标记,’.’ 就匹配 除了 换行符的其他任意字符 |
re.U | 根据Unicode字符集解析 |
re.X | 此标志允许您编写正则表达式,看起来更好。在模式中的空白将被忽略,除非当在字符类或者前面非转义反斜杠,和,当一条线包含一个’#‘既不在字符类中或由非转义反斜杠,从最左侧的所有字符之前,这种’#'通过行末尾将被忽略。 |
关于re.X的一个例子:
a = re.compile(r"""\d + # the integral part
\. # the decimal point
\d * # some fractional digits""", re.X)
b = re.compile(r"\d+\.\d*")
例如这里我匹配寻找百分数的模式:
re.compile(ur"GDP\u589e\u957f\d+%",re.I)#GDP增长X%
其他一些常用正则表达模块
re.search(pattern, string, flags=0)
上面的sentence代表要匹配的数据,flags和re.compile中的意思一致。
这里的search也可以作为编译模块的一个对象,如下:
p = re.compile(ur"GDP\u589e\u957f\d+%",re.I)
p.search(string)
search用于返回第一匹配到的字串,如果没有命中则返回None
re.match(pattern, string, flags=0)
从字符串首字符匹配,返回第一个成功的字符串,如果起始位置没有没有命中则返回None
re.split(pattern, string, maxsplit=0, flags=0)
切分字符串
-->re.split('\W+', 'Words, words, words.')
-->['Words', 'words', 'words', '']
-->re.split('(\W+)', 'Words, words, words.')
-->['Words', ', ', 'words', ', ', 'words', '.', '']
re.findall(pattern, string, flags=0)
找出所有符合这个模式的字符串
re.finditer(pattern, string, flags=0)
re.sub(pattern, repl, string, count=0, flags=0)
字符串替换
re.subn(pattern, repl, string, count=0, flags=0)
执行相同的操作,如sub(),但返回一个元组(new_string, number_of_subs_made)
re.escape(pattern)
返回的字符串与所有非字母数字带有反斜
re.purge()
清除正则表达式缓存