Fork me on GitHub

正则表达式必知必会

在线测试

基本语法

速查表

single char quantifiers(数量) position(位置) 需要注意的转义符号
\d 匹配数字 * 0个或者更多 ^一行的开头 \\
\w 匹配word(数字、字母) + 1个或更多,至少1个 $一行的结尾 \(
\s 匹配white space(包括空格、tab等) ? 0个或1个,一个Optional \b 单词"结界"(word bounds)
\S 匹配white space(包括空格、tab等) {min,max}出现次数在一个范围内
. 匹配任何,任何的字符 {n}匹配出现n次的

进阶内容

分类符

  1. []的作用,用英文表达就是"alternation",表达一个或的逻辑;

  2. /[-.(]/ 在符号中的连字符-放在第一位表示连字符本身,如果放在中间,表示"从..到..",比如[a-z]表示a-z

  3. [.)] 括号中的特殊符号不需要转义,就表示其本身

  4. [^ab] 括号中的^表示非,anythings except a and b

  5. (a|b)也可表示选择,但是它有更强大的功能....

分组捕获

  1. 分组捕获,使用()进行数据分组,编号0代表整个匹配项,选择的分组从1号开始
  2. 选择器可以使用$1\1,但是使用场景不同,\用在正则表达式自己身上

贪婪匹配

如何匹配HTML标签

  1. <.+?> ?符号可以禁止贪婪属性,放在.*`之后,表示一次匹配遇到重点就可以停止。否则将会一直向后匹配。

  2. <[^<>]+> 匹配除了<和>的字符

前向匹配

  1. d(?=r) 只有d紧跟r才会匹配,但是r不是匹配串的一部分
  2. (?<=r)d 只有d前面是r才会匹配,但是r不是匹配串的一部分
  3. (?r)**d 只有d前面不是r才会匹配,但是r不是匹配串的一部分

在Python中的应用

反斜杠困境

在字符串之前加一个r可以保证匹配原始符号

Regular String Raw string
"ab*" r"ab*"
"\\\\section" r"\\section"
"\\w+\\s+\\1" r"\w+\s+\1"

分步匹配

编译Pattern objects

import re
p = re.compile('ab*',re.X) # 创建Pattern objects

Pattern objects编译标记

Flag Meaning
IGNORECASE, I 忽略大小写
MULTILINE, M 多行匹配,会影响^$

Pattern objects常用方法

Method/Attribute Purpose
match() 返回匹配对象(Match Object)
search() 返回匹配的位置
findall() 以列表形式返回所有匹配的子串
finditer() 以迭代器形式返回所有匹配的子串
sub('替换串','待替换串',count=1) 找到所有的字符串并替换
subn() 和sub效果一样,但会多返回一个替换位置

Match object常用方法

  • 调用相关方法前,先确定Match Object是否匹配
Method/Attribute Purpose
group() 返回匹配的字符串
start() 返回匹配的起始位置
end() 返回匹配的结束位置
span() 返回匹配的起止位置

直接匹配

  • 不在循环中进行正则匹配时可以考虑直接匹配
re.match(r'From\s+', 'From amk Thu May 14 19:12:10 1998')  
<re.Match object; span=(0, 5), match='From '>

参考

正则表达式的教程笔记

Regex tutorial — A quick cheatsheet by examples

Regular Expression HOWTO在线测试

基本语法

速查表

single char quantifiers(数量) position(位置) 需要注意的转义符号
\d 匹配数字 * 0个或者更多 ^一行的开头 \\
\w 匹配word(数字、字母) + 1个或更多,至少1个 $一行的结尾 \(
\s 匹配white space(包括空格、tab等) ? 0个或1个,一个Optional \b 单词"结界"(word bounds)
\S 匹配white space(包括空格、tab等) {min,max}出现次数在一个范围内
. 匹配任何,任何的字符 {n}匹配出现n次的

进阶内容

分类符

  1. []的作用,用英文表达就是"alternation",表达一个或的逻辑;

  2. /[-.(]/ 在符号中的连字符-放在第一位表示连字符本身,如果放在中间,表示"从..到..",比如[a-z]表示a-z

  3. [.)] 括号中的特殊符号不需要转义,就表示其本身

  4. [^ab] 括号中的^表示非,anythings except a and b

  5. (a|b)也可表示选择,但是它有更强大的功能....

分组捕获

  1. 分组捕获,使用()进行数据分组,编号0代表整个匹配项,选择的分组从1号开始
  2. 选择器可以使用$1\1,但是使用场景不同,\用在正则表达式自己身上

贪婪匹配

如何匹配HTML标签

  1. <.+?> ?符号可以禁止贪婪属性,放在.*`之后,表示一次匹配遇到重点就可以停止。否则将会一直向后匹配。

  2. <[^<>]+> 匹配除了<和>的字符

前向匹配

  1. d(?=r) 只有d紧跟r才会匹配,但是r不是匹配串的一部分
  2. (?<=r)d 只有d前面是r才会匹配,但是r不是匹配串的一部分
  3. (?r)**d 只有d前面不是r才会匹配,但是r不是匹配串的一部分

在Python中的应用

反斜杠困境

在字符串之前加一个r可以保证匹配原始符号

Regular String Raw string
"ab*" r"ab*"
"\\\\section" r"\\section"
"\\w+\\s+\\1" r"\w+\s+\1"

分步匹配

编译Pattern objects

import re
p = re.compile('ab*',re.X) # 创建Pattern objects

Pattern objects编译标记

Flag Meaning
IGNORECASE, I 忽略大小写
MULTILINE, M 多行匹配,会影响^$

Pattern objects常用方法

Method/Attribute Purpose
match() 返回匹配对象(Match Object)
search() 返回匹配的位置
findall() 以列表形式返回所有匹配的子串
finditer() 以迭代器形式返回所有匹配的子串
sub('替换串','待替换串',count=1) 找到所有的字符串并替换
subn() 和sub效果一样,但会多返回一个替换位置

Match object常用方法

  • 调用相关方法前,先确定Match Object是否匹配
Method/Attribute Purpose
group() 返回匹配的字符串
start() 返回匹配的起始位置
end() 返回匹配的结束位置
span() 返回匹配的起止位置

直接匹配

  • 不在循环中进行正则匹配时可以考虑直接匹配
re.match(r'From\s+', 'From amk Thu May 14 19:12:10 1998')  
<re.Match object; span=(0, 5), match='From '>

参考

正则表达式的教程笔记

Regex tutorial — A quick cheatsheet by examples

Regular Expression HOWTO

posted @ 2019-10-18 09:11  JasonBUPT  阅读(317)  评论(0编辑  收藏  举报