1. 正则表达式常用操作符
操作符 | 说明 | 实例 |
---|---|---|
. | 除换行以外的任何单个字符 | |
[ ] | 字符集,对单个字符给出取值范围 | [abc]表示a或b或c、[a-z]表示a到z单个字符 |
[^ ] | 字符集,对单个字符给出排除范围 | [^abc]表示非a非b非c的单个字符 |
* | 前一个字符0次或无限次扩展 | ab*表示a、ab、abb、abbb、等 |
+ | 前一个字符1次或者无限次扩展 | ab+表示ab、abb、abbb等 |
? | 前一个字符0次或者1次扩展 | abc?表示ab或abc |
{m} | 扩展前一个字符m次 | ab{2}c表示abbc |
{m,n} | 扩展前一个字符m至n([m,n])次 | ab{1,2}c表示abc或abbc |
| | 左右表达式任意一个 | abc|def表示abc或def |
^ | 匹配字符串开头 | ^abc表示abc且在一个字符串的开头 |
$ | 匹配字符串结尾 | $abc表示abc且在一个字符串的结尾 |
( ) | 分组标记,内部只能使用 | 操作符 | (abc)表示abc,(abc|def)表示abc或def |
\d | 单个数字,等价于[0-9] | \D 为 \d 的对立面 |
\w | 单词字符,等价于[A-Za-z_0-9] | \W 为 \w 的对立面 |
\s | 匹配单个空白符,包括空格、换行、tab缩进等 | \S 为 \s 的对立面 |
\b | 单词边界:\w和开头(结尾) 或者 \w 和 \W 之间 | cat\b 匹配 cat, tomcat不匹配cater,\B是\b的对立面 |
3. 操作符优先级
从高到低
圆括号 | () |
---|---|
数量词 | + * ? {m,n} |
序列和锚 | abc ^ $ \b \B |
替换 | | |
3. 模式匹配规则
对于 pattern, string:
-
匹配规则:游标从string第一个字符开始与pattern匹配,匹配成功游标前进pattern的长度,不成功前进1
-
贪婪匹配: *、+ 会尽可能长的匹配一个子串,如果需要最短匹配写成:*? 、+?
-
空白串的匹配: a*, a?会匹配空串,匹配完空串游标需要加1(否则会无线匹配),注意和第一点不同。
2. 经典正则表达式实例
表达式 | 描述 |
---|---|
^[a-zA-Z]+$ | 由26个字母组成的字符串 |
^[a-zA-Z0-9]+$ | 由26个字母和数字组成的字符串 |
^-?\d+$ | 整数形成的字符串 |
^[0-9]\*[1-9][0-9]\*$ | 正整数形成的字符串 |
[1-9]\d{5} | 中国境内邮政编码,6位 |
[\u4e00-\u9fa5] | 匹配中文字符 |
\d{3}-\d{8}|\d{4}-\d{7} | 国内电话号码,010-68913536 |
3. Re库主要功能函数
函数 | 功能 |
---|---|
re.findall(pattern, string) | 搜索字符串,以列表类型返回全部能匹配的子串 |
re.split(pattern, string) | 将一个字符串以正则表达式匹配内容进行分割,返回列表类型 |
re.sub(pattern, repl, string) | 在string中用repl替换所有pattern的字串 |
re.search(pattern, string) | 字符串找到匹配样式的第一个位置,返回匹配对象。未匹配,返回None |
re.match(pattern, string) | 只能匹配字符串开头相当于, re.search('^' + pattern, string) |