Regular Expression
- 正则表达式是文本处理极为重要的技术,用它对字符串按照某种规则进行检索、替换;
一、基本语法:
1.1 元字符 meta character【1、元字符都是表示一个字符;2、元字符中的斜杠都是反斜杠;3、全局匹配;】
注意:
- 元字符 \w 类似标识符;
- 转义:凡是在正则表达式中有特殊意义的符号,如果想使用它的本意,请使用 \ 转义;
- \r 、 \n 还是转义后代表回车、换行;
1.2 重复
小结:
- 至少重复 0 次的有:* 、? ;
- 至少重复 1 次的有:+ ;
- 至多重复 1 次的有:?;
- { n } 与 { n,} 有区别,前者固定重复 n 次;后者至少重复 n 次,至多重复无限制;
1.3 表达式
注意:
- Python使用命名分组中时,格式为(?P<name>exp)需要在 ?问号后加 P 大写的P;
- 使用命名分组的分组时,调用分组需要在尖括号前加转义字符 \ ;eg:\<name>
- 特别注意:使用断言时匹配到的是断言前的字符,而不是断言中的条件;这里要特别注意;
- 在正则表达式中注释少用;
- 分组和捕获是同一个意思;
- 断言与分组不同,断言不占用分组号;断言如同条件,只是要求匹配必须满足断言的条件;
二、贪婪与非贪婪
- 默认是贪婪模式,也就是说尽量多匹配更长的字符串;
- 非贪婪很简单,在重复的符号后面加上一个 ? 问号,就尽量的少匹配了;
2.1 非贪婪模式
eg:very very happy
- 使用贪婪模式:v.*y Match:very very happy
- 使用非贪婪模式:v.*?y Match:(1)very(2)very
2.2 引擎选项
小结:
- 单行模式:
- . 点可以匹配所有字符,包括换行符;
- ^ 脱字符表示整个字符串的开头,$ 整个字符串的结尾;
- 多行模式:
- . 点可以匹配除了换行符之外的字符;
- ^ 脱字符表示行首,$ 行尾;
- ^ 脱字符表示整个字符串的开始,$ 表示整个字符串的结尾。开始指的是 \n 后紧接着下一个字符,结束指的是 \n 前的字符;
- 总结:可以认为,单行模式就如同看穿了换行符,所有文本就是一个长长的只有一行的字符串,所以 ^ 脱字符就是这一行字符串的行首,$ 就是这一行的行尾;
- 多行模式:无法穿透换行符,^ 脱字符和 $ 还是行首行尾的意思,只不过限于每一行;
注意:注意字符串中看不见的换行符,\r\n 会影响 e$ 的测试,e$ 只能匹配e\n