正则匹配的各种模式
1.择一匹配(|)
择一匹配用管道符号(|),也就是竖线表示。代表可以从多个模式中选择一个,可用于分割正则表达式。例如: ABC | abc 表示即可以匹配 ABC,又可以匹配 abc。
2.匹配任意单个字符
- 点号(.)可以匹配除换行符 \n 以外的任意字符,无论是空格,字母,数字,可打印字符、不可打印字符,还是一个符号,使用点号都能够匹配它们。
- 在Python中,如果使用模块属性re.S 也就是 re.DOTALL,那么换行符 \n 也可以匹配了。
3.从字符串起始或者结尾或者单词边界匹配
- 要匹配字符串的开始位置,可以使用脱字符(^)或者特殊字符 \A 。例如:^start,匹配从start开始。
- 要匹配字符串的结束位置,可以使用美元符号($)或者 \Z 。例如:end$,匹配以end结束。
- 特殊字符\b 和\B 可以用来匹配字符边界。区别在于\b 用于匹配一个单词的边界,即如果一个模式必须位于单词的起始部分,就不管该单词前面是否有任何字符。同样,\B 将匹配出现在一个单词中间的模式。
例如:
- \bthe,匹配以 the开头的字符串。
- \bthe\b,仅仅匹配单词 the。
- \Bthe, 任何包含但并不以 the 作为起始的字符串
4.字符集
使用方括号表示字符集,可以匹配字符集中的任意符号。例如:b[aeiu]t,可以匹配 bat、bet、bit、but。
5.限定范围和否定
- 使用 - 连接字符,表示匹配两个字符之间的任意字符。例如: 1-9,A-Z,分别用于表示数值数字、大写字母。
- 在方括号中的字符前加 ^,表示否定,不匹配 ^ 之后的字符,例如:[^aeiou],表示一个非元音字符。
6.特殊符号*、+和?
- 星号操作符(*)将匹配其左边的正则表达式 出现零次或者多次的情况。
- 加 号(+)操作符将匹配一次或者多次出现的正则表达式。
- 问号(?) 操作符将匹配零次或者一次出现的正则表达式。也叫做非贪婪匹配。
7. 使用圆括号指定分组
一对圆括号可以实现以下任意一个(或者两个)功能:1.对正则表达式进行分组;2.匹配子组。
8.扩展表示法
扩展表示法时以问号开始(?…)的。通常用于在判断匹配之前提供标记,实现一个前视(或者后视)匹配,或者条件检查。尽管圆括号使用这些符号,但是只有(?P<name>)表述一个 分组匹配。所有其他的都没有创建一个分组。
正则表达式模式 匹配的字符串
(?:\w+\.)* 以句点作为结尾的字符串,例如“google.”、“ twitter.”、“ facebook.”,但是这些匹配不会保存下来 供后续的使用和数据检索。
(?#comment) 此处并不做匹配,只是作为注释。
(?=.com) 如果一个字符串后面跟着“.com”才做匹配操作,并不使用任何目标字符串。
(?!.net) 如果一个字符串后面不是跟着“.net”才做匹配操作。
(?<=800-) 如果字符串之前为“800-”才做匹配,假定为电话号码,同样,并不使用任何输入字符串。
(?<!192\.168\.) 如果一个字符串之前不是“192.168.”才做匹配操作,假定用于过滤掉一组 C 类 IP 地址。
(?(1)y|x) 如果一个匹配组 1(\1)存在,就与 y匹配;否则,就与 x 匹配。