python——re模块

re模块

前两天写课设的时候需要用爬虫,乘此机会把正则表达式学了一下。
写这篇文章也是为了总结一下(方便以后忘了的时候查表2333)

正则表达式简介

在处理字符串或是网页时,经常会查找具有某些特定规则的字符串,这时正则表达式就会使得该过程很方便。

正则表达式中的特殊字符含义

字符 在正则表达式中的含义 例子 匹配结果(随机举例)
. 匹配除了换行符之外任意字符 g…d good
\ 特殊字符转义成普通字符 $ $
* 匹配一个字符串0次或多次 (aa)* aa
+ 匹配一个字符串1次或多次 (ab)* ab
? 匹配一个字符串0次或1次 (asd)? ‘asd’ or ‘’
^ 匹配字符串的开头 ^(asd) asd开头的字符串
$ 匹配字符串的结尾 (.exe)$ .exe结尾的字符串
| 匹配左右表达式任意一个 abc|123 匹配abc或123
{} {M}匹配M次,{M,}至少M次,{M,N}M到N次 a{2,3} aaa
[] 对应的字符可以是字符集中任意字符,-表示范围,^表示取反,所\有特殊字符失去特殊含义 a[a-z]b azb
() 分组作为一个整体 a(123|456)c a123c

几点补充:
1.在上述带有次数限定的字符后增加’?’,意思为懒惰匹配,即尽可能少的重复
2.在正则表达式前面加上字符r,表示特殊字符按原始意义处理

预定义的字符集

字符集 在正则表达式中的含义 例子 匹配结果(随机举例)
\d 匹配数字 \daa 1aa
\D 匹配非数字 \Daa aaa
\s 匹配任何空白字符 a\sa a a
\S 匹配非空白字符 a\Sa aaa
\w 字母/数字字符/下划线/汉字 a\wa a_a
\W 匹配特殊字符 a\Wa a$a
\A 仅匹配字符串开头
\Z 仅匹配字符串结尾
\b 表示单词的分界处
\B \B的反集

一些例子

  • ^\d{5, 12}$:
    5-12个数字
  • 0\d{2}-\d{8}:
    电话号码格式
  • \b\w{6}\b:
    6个字符的单词
  • (?0\d{2}[)-]?\d{8}:
    (010)88886666,或022-22334455
  • ((2[0-4]\d|25[0-5]|[01]?\d\d?).){3}(2[0-4]\d|25[0-5]|[01]?\d\d?):
    ip地址

更多有关 组 的问题后续再补充吧

库函数

  • 有关参数flag
    re.I:忽略大小写
    re.L:特殊字符集依赖当前环境
    re.M:多行模式
    re.S:’.'包括换行符
    re.U:特殊字符集依赖Unicode字符属性
  • reObj = re.compile(pattern[, flags])
    把正则表达式语法转换为正则表达式对象
  • re.search(pattern, string[, flags])
    reObj.search(string[, pos[, endpos]])
    在string中查找匹配pattern的位置,返回MatchObject的实例,没找到返回None
  • re.match(pattern, string[, flags])
    reObj.match(string[, pos[, endpos]])
    只在字符串开始位置尝试匹配正则表达式
  • re.split(pattern, string[, maxsplit=0, flags=0])
    将字符串匹配正则表达式的部分分隔开,并返回列表
  • re.findall(pattern, string[, flags])
    reObj.findall(string[, pos[, endpos]])
    找到字符串中匹配的所有子串,返回列表
  • re.finditer(pattern, string[, flags])
    reObj.finditer(string[, pos[, endpos]])
    和findall类似,返回迭代器
  • re.sub(pattern, repl, string[, count, flags])
    reObj.reObj(repl, string[, count=0]])
    在字符串中找到匹配的子串,用repl替换,没找到则返回string
  • re.sub(pattern, repl, string[, count, flags])
    reObj.reObj(repl, string[, count=0]])
    与sub类似,不同处在于还会返回新字符串和替换的次数

你可能感兴趣的:(Python)