匹配集合与补集
- 字符组表达式 […] 匹配括号中列出的任一个字符
- [abc] 可以匹配字符 a 或 b 或 c
- 区间形式 [0-9] 是顺序列出的缩写,匹配所有十进制数字
- 字符 [0-9a-zA-Z]匹配所有字母(英文字母)和数字
- [^…] 中的 ^ 表示求补,这种模式匹配所有未在括号里列出的字符
- [^0-9] 匹配所有非十进制数字的字符
- [^ \t\v\n\f\r] 匹配所有非空白字符(非空格/制表符/换行符)
- 如果需要在字符组里包括 ^,就不能放在第一个位置,以免混淆含义。可以写^恢复其本来含义;如 果需要在字符组包括 - ],也必须写 -或 ]
常规字符匹配
r1 = re.compile('abc’)
常用字符组
- 为了方便,re 用换意串形式定义了几个常用字符组,包括:
\d:与十进制数字匹配,等价于 [0-9]
\D:与非十进制数字的所有字符匹配,等价于 [^0-9]
\s:与所有空白字符匹配,等价于 [ \t\v\n\f\r]
\S:与所有非空白字符匹配,等价于 [^ \t\v\n\f\r]
\w:与所有字母数字字符匹配,等价于 [0-9a-zA-Z]
\W:与所有非字母数字字符匹配,等价于 [^0-9a-zA-Z] - 圆点字符 . 可以匹配任意一个字符
a…b 匹配所有以 a 开头 b 结束的四字符串
重复 - 常希望写重复匹配的模式(部分),任意次或若干次重复:
- 基本重复运算符是 ,α 与 α 的 0 次或任意多次出现匹配:例如[1-9][0-9]或者[1-9]\d代表任意大的正整数
- 与 * 略微不同的重复运算符 + 表示 1 次或多次重复:例:允许以0开头时,描述正整数的一种简单写法’\d+’; ‘α +’,等价于 'αα* ’
常希望写重复匹配的模式(部分),任意次或若干次重复:
- 用 ? 运算符表示 ? 表示 0 次或 1 次重复 例,描述整数(表示整数的字符串)的一种简单模式 ‘-?\d+’,其前面的’-?'部分表示可以以负号开头。
- 确定次数的重复用 {n} 表示,α{n} 与 α 匹配的串的 n 次重复匹配:
描述北京常规的固话号码:’(010-)?[2-9][0-9]{7}'表示可选010前缀,2-9开头,后面的任意数字加起来一共可以有七位。
使用正则表达式抽取数据
网页源代码
- 名称嵌在
和
之中 - 写出对应的正则表达式
(.+?)
- 字符 . 负责匹配除了换行字符意外的任何字符
- 字符 +? 负责字符匹配的范围
- () 区别于字符集合 [] ,代表捕获组 (.+?)
- 表示匹配标签之间的所有内容