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. 匹配模式
单行模式
单行模式下 . 可以匹配任意一个字符,换行符仅仅做字符用,不表示匹配终止。
^ 表示整个字符串的开始;
$ 表示整个字符串的结束;
单行模式表示只有一行,不存在换行是说法,正常情况下很少使用。多行模式
多行模式下,换行符作为分界。. 不能匹配换行符。
^ 表示该行的行首
$ 表示该行的行尾
说明:\是作为特殊字符的逃逸符,\\\表示\。
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
(?:pattern) 只改变优先级,不进行分组。
(?
说明:python下需要使用(?P
2. 断言
断言就要预测将会出现的字符。由于概念过于生涩,此处仅仅书写表达式。
正预测断言
f(?=oo) : 断言f后(右侧)一定会出现oo;
(?<=f)ood:断言ood的左侧一定会出现f;负预测断言
(?!exp): 断言exp一定不会出现在右侧;
(?<!exp):断言exp一定不会出现在左侧。(?<!f)ood ood的左侧一定不会出现f注释
(?#cooment) f(?=oo)(?#注释的位置)
3. 贪婪与非贪婪模式
贪婪模式:尽可能的多匹配;
非贪婪模式:匹配最小部分,在重复的符号后边加上一个?。
正则表达式默认使用的是贪婪模式。
*? 匹配任意次,但尽可能的少重复
+? 匹配至少1次,但尽可能的少重复
? 匹配0次或者1次,但尽可能的少重复
{n,}? 匹配至少n次,但尽可能的少重复
{n,m}? 匹配至少n次,至多m次,但尽可能的少重复
4. 引擎
python下使用正则表达式,需要使用re模块。
- 忽略大小写:
re.l - 单行模式:
re.S - 多行模式:
re.M - 忽略表达式的空白字符
re.X