正好又要用到,算温故知新吧。

正则表达式

称为RE,或正则,或正则表达式。本质上是嵌入在Python中的一种微小的。专业化的编程语言,可以通过re模块获得。

元字符的完整列表;

.    ^    $    *    +    ?    { }    [ ]    \    |    ( )

. 匹配除了换行的任意字符。指定了DOTALL,它将匹配包括换行符的任意字符

^ 匹配字符串的开头,并且在MULTILINE模式也匹配换行后的首个符号

$ 匹配字符串或者尾或者换行符前一个字符。通常是一个元字符,但在一个字符类中的元字符不生效。例如,[skm$]将匹配‘s','k','m'或'$'中的任意字符;

  • 与字面上字符 * 不匹配;指定前一个字符可以匹配零次或多次,而不是恰好一次。

.* 连在一起就意味着任意数量的不包括换行的字符。

  • 也是重复的元字符;它匹配一次或多次。 与 + 之间的区别; 匹配零次或更多次。而至少需要 一次。

? 重复零次或一次

{n} 重复n次

{n,} 重复n次或更多次

{n,m} 重复n到m次

b 是正则表达式规定的一个特殊的代码。不匹配任何一个字符,只匹配一个位置。匹配单词的开始或结束。

d 匹配一位数字。-不是元字符,只匹配它本身,连字符(或者减号)

s 匹配任意空白符,包括空客,制表符(Tab),中文全角空格等。

w 匹配字母或数字或下划线或汉字等。

B 匹配不是单词开头或结束的位置

D 匹配任意非数字的字符

S 匹配任意不是空白符的字符

W 匹配任意不是字母,数字,下划线,汉字的字符

1 匹配除x以外的任意字符

2 匹配除了aeiou这几个字母以外的任意字符

<a3+>匹配用尖括号括起来的以a开头的字符串

常用的分组语法

(exp) 匹配exp,并捕获文本到自动命名的组里

(?<name>exp) 匹配exp,并捕获文本到名称为name的组里,也可以写成(?'name'exp)

(?:exp) 匹配exp不捕获匹配的文本,也不给此分组分配组号

(?=exp) 匹配exp前面的位置

(?<=exp) 匹配exp后面的位置

(?!exp) 匹配后面跟的不是exp的位置

(?<!exp)匹配前面不是exp的位置

例:d{3}(?!d)匹配三位数字,而且这三位数字的后面不能是数字;b((?!abc)w)+b匹配不包含连续字符串abc的单词。

*? 重复任意次,但尽可能少重复

+? 重复一次或更多次,当尽可能少重复

?? 重复0次或1次,但尽可能少重复

{n,m}? 重复n到m次,但尽可能少重复

{n,}? 重复n次以上,但尽可能少重复

(?#comment) 包含注释。例如:2[0-4]d(?#200-249)|250-5|[01]?dd?(?#0-199)。

编写正则的三步走:

手机导入re模块

1、将正则表达式的字符串形式编译为一个实例

实例 = re.compile('匹配的规则')

2、使用实例处理文本并获得匹配结果

匹配结果 = 实例.match('匹配的对象内容')

3、实例获得的信息进行其它操作。


  1. x
  2. aeiou
  3. >