python——re模块

re模块

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

正则表达式简介

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

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

字符在正则表达式中的含义例子匹配结果(随机举例)
.匹配除了换行符之外任意字符g…dgood
\特殊字符转义成普通字符$$
*匹配一个字符串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]bazb
()分组作为一个整体a(123|456)ca123c

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

预定义的字符集

字符集在正则表达式中的含义例子匹配结果(随机举例)
\d匹配数字\daa1aa
\D匹配非数字\Daaaaa
\s匹配任何空白字符a\saa a
\S匹配非空白字符a\Saaaa
\w字母/数字字符/下划线/汉字a\waa_a
\W匹配特殊字符a\Waa$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类似,不同处在于还会返回新字符串和替换的次数
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值