2020-12-04
python
00
请注意,本文编写于 1290 天前,最后修改于 1290 天前,其中某些信息可能已经过时。

目录

1. 基本语法
1. 元字符
2. 匹配模式
3. 重复
4. 分组
2. 断言
3. 贪婪与非贪婪模式
4. 引擎

1. 基本语法

1. 元字符

. 匹配除换行符外的任意一个字符 [abc] 匹配到abc 中的任意一个字符 [^abc] 匹配到abc之外的的任意字符 [a-z] 匹配所以小写字符集合 [A-Z] [0-9] [^a-z] \b 匹配单词的边界 \d digit 匹配一位数字 \D 匹配非数据 \s 匹配1位空白字符,包括换行制表符 空格 \S 匹配非空白字符 \w 匹配[a-zA-Z0-9_],包括中文的字符 \W 匹配\w之外的字符

说明:大写均表示反面匹配。

2. 匹配模式

  1. 单行模式 单行模式下 . 可以匹配任意一个字符,换行符仅仅做字符用,不表示匹配终止。 ^ 表示整个字符串的开始; $ 表示整个字符串的结束; 单行模式表示只有一行,不存在换行是说法,正常情况下很少使用。

  2. 多行模式 多行模式下,换行符作为分界。. 不能匹配换行符。 ^ 表示该行的行首 $ 表示该行的行尾

说明:\是作为特殊字符的逃逸符,\\\表示\。

3. 重复

* 表示前面的正则表达式重复0次或者多次 + 表示重复至少一次 ? 表示重复0或者1次 {n} 重复固定的n次 {n,} 至少n次 {n,m} n到m次

4. 分组

x|y 匹配x或者匹配y,(w|f)ood 可以匹配到wood 或者food。

小括号括起来一个表达式,表示把该表达式进行分组。分组的作用是便于后边的引用(位置参数),使用#(#为数字)引用。

(patterm) : 分组 # : 引用

举例: (very) \1 可以匹配到very very

(?

) 只改变优先级,不进行分组。 (?exp) 或者 (?'name'exp) 给分组命令,可以通过名称引用。 说明:python下需要使用(?Pexp)进行使用。

2. 断言

断言就要预测将会出现的字符。由于概念过于生涩,此处仅仅书写表达式。

  1. 正预测断言 f(?=oo) : 断言f后(右侧)一定会出现oo; (?<=f)ood:断言ood的左侧一定会出现f;

  2. 负预测断言 (?!exp): 断言exp一定不会出现在右侧; (?<!exp):断言exp一定不会出现在左侧。(?<!f)ood ood的左侧一定不会出现f

  3. 注释 (?#cooment) f(?=oo)(?#注释的位置)

3. 贪婪与非贪婪模式

贪婪模式:尽可能的多匹配; 非贪婪模式:匹配最小部分,在重复的符号后边加上一个?。

正则表达式默认使用的是贪婪模式。

*? 匹配任意次,但尽可能的少重复 +? 匹配至少1次,但尽可能的少重复 ? 匹配0次或者1次,但尽可能的少重复 {n,}? 匹配至少n次,但尽可能的少重复 {n,m}? 匹配至少n次,至多m次,但尽可能的少重复

4. 引擎

python下使用正则表达式,需要使用re模块。

  1. 忽略大小写: re.l
  2. 单行模式: re.S
  3. 多行模式: re.M
  4. 忽略表达式的空白字符 re.X

本文作者:mykernel

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!