#regularExpression for python
一 元字符
1 . 匹配除了换行符以外的任意一个字符
2 [abc] 匹配集合中的任意一个字符
3 [^abc] 匹配除了集合中的任意一个字符
4 [a-z] 匹配区间内的任意一个字符
5 [^0-9] 匹配除了区间内的任意一个字符
6 \babc 匹配以a开头的单词 \Babc\w 匹配不以a开头的单词,但后面的单词必须有abc的单词
7 \d [0-9]匹配一位数字 \D 匹配一位非数字
8 \s 匹配一位空白字符 \S 匹配一位非空白的字符
9 \w [a-z0-9A-Z]匹配一位集合内的字符,包含中文 \W 匹配除了集合以外的字符
二 重复
1 * 表示0次或者多次
2 + 表示一次或者多次,至少一次
3 ? 表示0次或者1次
4 {n} 表示n次
5 {n,} 表示最少n次
6 {n,m} 表示最少n次最多m次
三 ?,*,+,\d,\w 都是等价字符
1 ?等价于匹配长度{0,1}
2 *等价于匹配长度{0,}
3 +等价于匹配长度{1,}
4 \d等价于[0-9]
5 \D等价于[^0-9]
6 \w等价于[A-Za-z0-9]
7 \W等价于[^A-Za-z0-9] .-
四 子表达式,分组也叫捕获
1 x|y 匹配x或者y r(a|e)ry 必须加括号
2 (pattern) 表示一个分组,用\n引用 (very) \1
3 (?:pattern) 表示取消分组
4 (?'name'pattern) 分组别名方便后向引用 (?'name'very) \'name' 例子: 源文件very very 结果 very(1也是别名name) very very(0)
五 断言(断定后面或者前面跟上字符)
1 f(?=exp) 零宽先行断言 f后面一定出现exp表达式的字符
2 (?<=exp)f 零宽后发断言 f前面一定出现exp表达式的字符
3 f(?!exp) 负向零宽先行断言 f后面一定不会出现exp表达式的字符
4 (?<!exp)f 负向零宽后发断言 f前面一定不会出现exp表达式的字符
例子: (?<!\d+)([1-9]\d\d?|\d)(?!\d+) 从源文件中匹配三位数 123可以,前后都不能是数字1234无法匹配
六 贪婪模式与非贪婪模式
1 默认的是贪婪模式 尽量多的匹配
2 次数后加?非贪婪模式 尽量少的匹配
① *? 匹配任意次 但尽可能少匹配
例子 exp:v.*?y souece:very vary vhappy result:very
vary
vhappy #三条结果
exp:v.*y souece:very vary vhappy result:very vary vhappy #一条结果
② +? 匹配至少一次 但尽可能的少匹配
③ ?? 匹配0次或者1次 但尽可能的少匹配
④ {n,}? 匹配至少n次 但尽可能的少匹配
⑤ {n,m}? 匹配至少n次,至多m次 但尽可能的少匹配
七 单行模式和多行模式
1 单行模式 把所有源文件看作一个字符串
2 多行模式 把一行看作一个字符串 结尾用\r?$匹配