python的正则表达式

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. 匹配模式

  1. 单行模式
    单行模式下 . 可以匹配任意一个字符,换行符仅仅做字符用,不表示匹配终止。
    ^ 表示整个字符串的开始;
    $ 表示整个字符串的结束;
    单行模式表示只有一行,不存在换行是说法,正常情况下很少使用。

  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) 只改变优先级,不进行分组。
(?exp) 或者 (?’name’exp) 给分组命令,可以通过名称引用。
说明:python下需要使用(?Pexp)进行使用。

2. 断言

断言就要预测将会出现的字符。由于概念过于生涩,此处仅仅书写表达式。

  1. 正预测断言
    f(?=oo) : 断言f后(右侧)一定会出现oo;
    (?<=f)ood:断言ood的左侧一定会出现f;

  2. 负预测断言
    (?!exp): 断言exp一定不会出现在右侧;
    (?<!exp):断言exp一定不会出现在左侧。(?<!f)ood ood的左侧一定不会出现f

  3. 注释
    (?#cooment) f(?=oo)(?#注释的位置)

3. 贪婪与非贪婪模式

贪婪模式:尽可能的多匹配;
非贪婪模式:匹配最小部分,在重复的符号后边加上一个?。

正则表达式默认使用的是贪婪模式。

*? 匹配任意次,但尽可能的少重复
+? 匹配至少1次,但尽可能的少重复
? 匹配0次或者1次,但尽可能的少重复
{n,}? 匹配至少n次,但尽可能的少重复
{n,m}? 匹配至少n次,至多m次,但尽可能的少重复

4. 引擎

python下使用正则表达式,需要使用re模块。

  1. 忽略大小写:
    re.l
  2. 单行模式:
    re.S
  3. 多行模式:
    re.M
  4. 忽略表达式的空白字符
    re.X
---------------- 谢谢光临 ----------------

本文标题:python的正则表达式

文章作者:pxrux

发布时间:2018年12月04日 - 14:12

最后更新:2018年12月04日 - 14:12

原始链接:http://www.mykernel.cn/python-re.html

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

0%