正则表达式学习
正则表达式学习
Python re模块
re常量
常量即表示不可更改的变量,一般用于做标记。
IGNORECASE
- 语法: re.IGNORECASE 或简写为 re.I
- 作用: 进行忽略大小写匹配。
ASCII
- 语法: re.ASCII 或简写为 re.A
- 作用: 顾名思义,ASCII表示ASCII码的意思,让
\w
,\W
,\b
,\B
,\d
,\D
,\s
和\S
只匹配ASCII,而不是Unicode。
DOTALL
- 语法: re.DOTALL 或简写为 re.S
- 作用: DOT表示
.
,ALL表示所有,连起来就是.
匹配所有,包括换行符\n
。默认模式下.
是不能匹配行符\n
的。
MULTILINE
语法: re.MULTILINE 或简写为 re.M
作用: 多行模式,当某字符串中有换行符
\n
,默认模式下是不支持换行符特性的,比如:行开头 和 行结尾,而多行模式下是支持匹配行开头的。正则表达式中
^
表示匹配行的开头,默认模式下它只能匹配字符串的开头;而在多行模式下,它还可以匹配 换行符\n
后面的字符。注意:正则语法中
^
匹配行开头、\A
匹配字符串开头,单行模式下它两效果一致,多行模式下\A
不能识别\n
。
VERBOSE
- 语法: re.VERBOSE 或简写为 re.X
- 作用: 详细模式,可以在正则表达式中加注解!
LOCALE(不常用)
- 语法: re.LOCALE 或简写为 re.L
- 作用: 由当前语言区域决定
\w
,\W
,\b
,\B
和大小写敏感匹配,这个标记只能对byte样式有效。这个标记官方已经不推荐使用,因为语言区域机制很不可靠,它一次只能处理一个 “习惯”,而且只对8位字节有效。
UNICODE
- 语法: re.UNICODE 或简写为 re.U
- 作用: 与 ASCII 模式类似,匹配unicode编码支持的字符,但是 Python 3 默认字符串已经是Unicode,所以有点冗余。
DEBUG
- 语法: re.DEBUG
- 作用: 显示编译时的debug信息。
TEMPLATE
- 语法: re.TEMPLATE 或简写为 re.T
- 作用:源码注释中写着:disable backtracking(禁用回溯)
re函数
查找匹配项
- search:查找任意位置的匹配项
- match:必须从字符串开头匹配
- fullmatch:整个字符串与正则匹配
查找多个匹配项
- findall:从字符串任意位置查找,返回一个列表
- finditer:从字符串任意位置查找,返回一个迭代器
分割
- re.split(pattern, string, maxsplit=0, flags=0) 函数:用 pattern 分开 string , maxsplit表示最多进行分割次数, flags表示模式,既re常量
替换
- re.sub(pattern, repl, string, count=0, flags=0) 函数参数讲解:repl替换掉string中被pattern匹配的字符, count表示最大替换次数,flags表示正则表达式的常量。
- re.subn(pattern, repl, string, count=0, flags=0) 函数与 re.sub函数 功能一致,只不过返回一个元组 (字符串, 替换次数)。
编译正则对象
以下将正则表达式的样式编译为一个 正则表达式对象
compile
函数template
函数
其他
- **re.escape(pattern)**:可以转义正则表达式中具有特殊含义的字符,比如:
.
或者*
- re.purge() :清除 正则表达式缓存
参考链接
Python正则表达式,这一篇就够了! - 知乎 (zhihu.com)
匹配模式
多种匹配模式
实例 | 描述 |
---|---|
[Pp]ython |
匹配 “Python” 或 “python”。 |
rub[ye] |
匹配 “ruby” 或 “rube”。 |
[abcdef] |
匹配中括号内的任意一个字母。 |
[0-9] |
匹配任何数字。类似于 [0123456789]。 |
[a-z] |
匹配任何小写字母。 |
[A-Z] |
匹配任何大写字母。 |
[a-zA-Z0-9] |
匹配任何字母及数字。 |
[^au] |
除了au字母以外的所有字符。 |
[^0-9] |
匹配除了数字外的字符。 |
实例 | 描述 |
---|---|
. |
匹配除 “\n” 之外的任何单个字符。要匹配包括 ‘\n’ 在内的任何字符,请使用象 ‘[.\n]’ 的模式。 |
? |
匹配一个字符零次或一次,另一个作用是非贪婪模式 |
+ |
匹配1次或多次 |
* |
匹配0次或多次 |
\b |
匹配一个长度为0 的子串 |
\d |
匹配一个数字字符。等价于 [0-9]。 |
\D |
匹配一个非数字字符。等价于 [^0-9]。 |
\s |
匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。 |
\S |
匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。 |
\w |
匹配包括下划线的任何单词字符。等价于’[A-Za-z0-9_]’。 |
\W |
匹配任何非单词字符。等价于 ‘[^A-Za-z0-9_]‘。 |
\b |
匹配一个长度为0 的子串 |