python正则表达式

正则表达式概述

正则表达式(Regular Expression)使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串。在很多文本编辑器里,正则表达式通常被用来检索、替换哪些匹配某个模式的文本。在开发中会有大量的字符串处理工作,其中经常会涉及的字符串格式的校验,比如网页中的注册表单。使用正则表达式会非常方便

— 检测输入的QQ号码

— 检测输入的e-mail地址

— 检测输入的手机号

python中正则表达式实现

python中需要通过正则表达式对字符串进行匹配的时候,可以使用re模块

# 导入re模块
import re
# 使用match方法进行匹配操作
result = re.match(正则表达式,要匹配的字符串)
# 如果上一步匹配到数据的话,可以使用group方法来提取数据
result.group()
  • re.match()是用来进行正则匹配检查的方法,若字符串匹配正则表达式,则match方法返回匹配对象(Match Object),否则返回None(注意不是空字符串“”)
  • 匹配对象Macth Object具有group方法,用来返回字符串的匹配部分。

表示字符

字符功能
.匹配任意一个字符(除了\n)
[ ]匹配[ ]中列举的字符
\d匹配数字,即 0-9 相当于[0-9]
\D匹配非数字
\s匹配空白,即空格,tab键
\D匹配非空白
\w匹配单词字符,即a-z 、A-Z 、0-9 、_
\W匹配非单词字符

例子:

import re
ret = re.match("h.","hello python")
ret.group()

原始字符串

  • python中字符串前面加上r表示原生字符串

  • 正则表达式里使用 “\” 作为转义字符

    — 假如你需要匹配文本中的字符 “\” ,那么使用正则表达式里将需要4个反斜杠 “\\” :前两个和后两个分别用于编程语言里转义成反斜杠,转换成两个反斜杠后再在正则表达式里转义成一个反斜杠

  • python里原生字符串很好地解决了这个问题,有了原始字符串,你在也不用担心是不是漏了反斜杠

表示数量

字符功能
*匹配前一个字符出现0次或者无限次,即可有可无
+匹配前一个字符出现1次或者无限次,即至少有1次
匹配前一个字符出现1次或者0次,即要么有1次,要么没有
{m}匹配前一个字符出现m次
{m,}匹配前一个字符至少出现m次
{m,n}匹配前一个字符出现从m到n次

表示边界

字符功能
^匹配字符串开头
$匹配字符串结尾
\b匹配一个单词的边界
\B匹配非单词边界

匹配163邮箱地址

re.match("\w{2,}@163.com","masicro@163.com")
# 匹配不到
re.match("\w{2,}@163.com","masicro@163.comhhh")

匹配分组

字符功能
|匹配左右任意一个表达式
(ab)将括号中的字符作为一个分组
\num引用分组num匹配到的字符串
(?P)分组起别名
(?P=name)引用别名为name分组匹配到的字符串
re.match("\w{1,}@(163|qq|126).com","masicro@163.com")
re.match("\w{1,}@(163|qq|126).com","masicro@qq.com")
re.match("\w{1,}@(163|qq|126).com","masicro@163.com")

# \num 用法
re.match(r"<(\w*)>\w*</\1>","<html>shaouhao</html>") 

python中re模块的其他用法

  • search 搜索符合特征的字符串

    ret = re.search(r"\d+","阅读次数为9999")
    ret.group()
    
  • findall 找出所有符合特征的字符串

    ret = re.findall(r"\d+","python = 9999,c = 7890,c++ = 12345")
    
  • sub 将匹配到的数据进行替换

  ret = re.sub(r"\d+",'998',"python = 997")
  • split 根据匹配进行切割字符串,并返回一个列表

    ret = re.split(r":| ",'info:xiaoZhang 33 shandong')
    

    贪婪模式和非贪婪模式

Python力正则表达式数量词默认是贪婪的(在少数语言里也可能是默认非贪婪),

贪婪模式——总是尝试匹配尽可能多的字符

非贪婪——总是尝试匹配尽可能少的字符

在 “*”,“ ?”,“+”,“{m,n}”后面加上?,使贪婪变成非贪婪

# 贪婪模式
re.match(r"aa(\d+)","aa1234dddd").group()
'aa1234'
# 非贪婪模式
re.match(r"aa(\d+?)","aa1234dddd").group()
'aa1'
# 贪婪和非贪婪都一样
re.match(r"aa(\d+)dddd","aa1234dddd").group()
re.match(r"aa(\d+?)dddd","aa1234dddd").group()
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值