Python—正则表达式详细讲解

一,概述

        正则表达式全称是 Regular Expression, 是用来校验和匹配数据,下面就来教你怎么看懂别人所写的正则表达式。

二,正则表达式的使用步骤

        1,导包

                import re

        2,正则校验的三个方法

                re.match(正则表达式,要匹配的内容(str),要被匹配的内容(flag))   对要被匹配的内容,从左到右全部匹配,错一个都不行。

                re.search((正则表达式,要匹配的内容(str),要被匹配的内容(flag)) 对要被匹配的内容,从左到右开始,只要能匹配上就行,不用全部匹配。

                re.sub(正则表达式, 用来替换的内容, 要被替换的内容),这是正则替换。

        3,获取匹配结果

                result = re.group()

三,正则规则

        下面是一些常见到的正则规则讲解:

        (1).  表示任意的一个字符(除了\n)

        (2)\. 表示取消上述.的本身含义,即只把它看做一个点来使用,比如校验邮箱里所含有的qq.com中的点。

        (3)[abc] 表示abc中任意一个字符

        (4)[^abc] 表示除了abc中任意一个字符

        (5)\d 表示所有的数字,等价于[0-9]

       (6) \D  表示所有的非数字,等价于[^0-9]

          (7)  \s 表示空白字符,比如空格,\t,\n等等

       (8)\S 表示非空白字符,除了上述\s那些

         (9) \w 表示非特殊字符,包括(字母,数字,下划线(_),汉字)

         (10) \W 表示特殊字符,除了上述\w那些

下面对这些正则规则做一个代码解释,用re.match匹配规则,方便理解。

#导包
import re

(1).的用法
#匹配演示:
result = re.match('lufei.','lufeig')  #匹配,结果是lufeig
#未匹配演示:
result = re.match('lufei.','l ufeig')  #未匹配

(2)\.的用法
#匹配演示:
result = re.match('lufei\.qq\.com','lufei.qq.com')  #匹配,结果是lufei.qq.com

#(3)[abc]的用法
#匹配演示:
result = re.match('[lufei].*','fsnx')  #匹配,结果是fsnx。.*的意思是后面可以跟多个任意字符
#未匹配演示:
result = re.match('[lufei].*','snx.') #未匹配

#(4)[^abc]的用法
#匹配演示:
result = re.match('[^lufei].*','afsnx')  #匹配,结果是afsnx。
#未匹配演示:
result = re.match('[^lufei].*','lsnx.') #未匹配

#(5)\d的用法
#匹配演示:
result = re.match('\d.*','6afsnx')  #匹配,结果是6afsnx。
#未匹配演示:
result = re.match('\d.*','lsnx.') #未匹配

#(6)\D的用法
#匹配演示:
result = re.match('\D.*','afsnx')  #匹配,结果是afsnx。
#未匹配演示:
result = re.match('\D.*','7lsnx.') #未匹配

#(7)\s的用法
#匹配演示:
result = re.match('\s.*','\t6afsnx')  #匹配,结果是 6afsnx,前面有个空格哦。
#未匹配演示:
result = re.match('\s.*','lsnx.') #未匹配

#(8)\S的用法
#匹配演示:
result = re.match('\S.*','afsnx')  #匹配,结果是afsnx。
#未匹配演示:
result = re.match('\S.*','\n7lsnx.') #未匹配

#(9)\w的用法
#匹配演示:
result = re.match('\w.*','6afsnx')  #匹配,结果是 6afsnx
#未匹配演示:
result = re.match('\w.*','!lsnx.') #未匹配

#(10)\W的用法
#匹配演示:
result = re.match('\W.*','$afsnx')  #匹配,结果是$afsnx。
#未匹配演示:
result = re.match('\W.*','7lsnx.') #未匹配

if result:
    rs = result.group()
    print(f'匹配到: {rs}')
else:
    print('未匹配!')

      (11) ?  表示要匹配的内容在要被匹配的内容里至少出现0次至多1次

      (12) * 表示出现至少0次,至多n次

   (13)+ 表示出现1次,至多n次

   (14){n} 表示恰好出现n次

   (15){n,} 表示至少出现n次

   (16){n,m} 表示至少出现n次至多出现m次

   (17)^  表示以什么开头

   (18)$ 表示以什么结尾
 

代码解释:

   

#导包
import re

#(11)?的用法
#匹配演示:
result = re.match('a?.*','afsnx')  #匹配,结果是afsnx。
#未匹配演示:
result = re.match('ab.?', 'a bk')  #未匹配

#(12)*的用法
#匹配演示:
result = re.match('a*','aaaafsnx')  #匹配,结果是aaaa。
#未匹配演示:
result = re.match('a.*', 'bbbk') #未匹配

#(13)+的用法
#匹配演示:
result = re.match('a+','aafsnx')  #匹配,结果是aa。
#未匹配演示:
result = re.match('a.+', 'bbbk')  #未匹配

#(14){n}的用法
#匹配演示:
result = re.match('a{2}','aafsnx')  #匹配,结果是aa。
#未匹配演示:
result = re.match('a.{2}', 'bbbk')  #未匹配

#(15){n,}的用法
#匹配演示:
result = re.match('a{2,}','aaaafsnx')  #匹配,结果是aaaa。
#未匹配演示:
result = re.match('a{2,}', 'abbbk')  #未匹配

#(16){n,m}的用法
#匹配演示:
result = re.match('a{2,5}','aaaafsnx')  #匹配,结果是aaaa。
#未匹配演示:
result = re.match('a{2,5}', 'abbbk')  #未匹配

#(17)^的用法
#匹配演示:
result = re.match('^abf.*','abfsnx')  #匹配,结果是abfsnx。
#未匹配演示:
result = re.match('^abf.*', 'abbbk')  #未匹配

#(18)$的用法
#匹配演示:
result = re.match('.*abf$','snxabf')  #匹配,结果是abfsnx。
#未匹配演示:
result = re.match('.*abf$', 'abbab')  #未匹配

if result:
    rs = result.group()
    print(f'匹配到: {rs}')
else:
    print('未匹配!')

 (19)|  表示或者的意思

#导包
import re

#  定义列表, 记录动物.
animals = ['dog', 'cat','bird','panda']
# 遍历, 获取到每一个动物.
for value in animals:
    result = re.match('dog|panda', value)
    # 打印结果.
    if result:
        print(f'喜欢的动物: {result.group()}')
    else:
        print(f'不喜欢的动物: {value}')

   (20)()表示分组 

import re
# 需求: 从 随便一个网址中 提取出http和com

result = re.match('(http)://[a-z].*\.(.*)', 'http://sjhduib.com')


if result:
    print(f'group(), {result.group()}')     # 结果为: http://sjhduib.com
    print(f'group(0), {result.group(0)}')   # 结果为: http://sjhduib.com
    print(f'group(1), {result.group(1)}')   # 结果为: http
    print(f'group(2), {result.group(2)}')   # 结果为: com
else:
    print('未匹配到!')

可以跟着敲一敲代码,会方便理解这些正则规则,希望可以帮到你哦。

            

  • 12
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值