匹配语法

作者:管理员 发布时间:2021-01-15 13:06

接下来,是字符匹配的语法结构,也是正则表达式的核心了。

单字符匹配

使用下列符号,代表一个不确定的内容字符

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












实例:

import re

moretext = "算法狮(aiSuanfashi.com)是一群热爱工作的程序员,他们每天7点钟起床上班,中午12点吃饭,晚上9点能回家睡觉,虽然有点辛苦,但我们依然很开心!" 


jidian = re.search('每天.点', moretext) #一个‘.’可以匹配任意一个字符,两个点可以匹配2个字符

print("每天几点起床?答:"+jidian.group())

jidian = re.search('晚上\d点', moretext) # ‘\d’标识1个数字,[0-9]匹配一个数字范围是0-9,也可以改成3-8等

print("完成几点回家?答:"+jidian.group())

#结果
#每天几点起床?答:每天7点
#完成几点回家?答:晚上9点


多字符匹配

学会了单字符匹配后,只能匹配一个不确定的字符,那如果我想匹配多个呢?如想匹配出上文内的网址,或中午吃饭的时间,那就需要进行多字符匹配。

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









实例:

import re

moretext = "算法狮(aiSuanfashi.com)是一群热爱工作的程序员,他们每天7点钟起床上班,中午12点吃饭,晚上9点能回家睡觉,虽然有点辛苦,但我们依然很开心!" 

jidian = re.search('中午[0-9]*点', moretext) #如果在单字符匹配后面加个*,就代表匹配内容不限个数(*与+的区别,在于*可以是0次,+至少1次,?为1次或0次)
print("中午几点吃饭?答:"+jidian.group())

jidian = re.search('[A-Z][a-z]*', moretext) #匹配出第一个字母为大写,后面都是小写字母的不限长度的内容
print("算法狮?答:"+jidian.group())

jidian = re.findall('[0-9]{1,2}点', moretext) #在单字符匹配后面加上{},里面可以设置匹配格式{2}代表出现2次,{1,3}代表出现1-3次
print(jidian)

#结果
#中午几点吃饭?答:中午12点
#算法狮?答:Suanfashi
#['7点', '12点', '9点']


指定字符头尾

字符功能
^匹配字符串开头
$匹配字符串结尾





import re

moretext = "算法狮(aiSuanfashi.com)是一群热爱工作的程序员,他们每天7点钟起床上班,中午12点吃饭,晚上9点能回家睡觉,虽然有点辛苦,但我们依然很开心!" 
jidian = re.search('很\w*!$', moretext) #以!为结尾,在”很“后面的字符
print("算法狮们的心情?答:"+jidian.group())
'''

#返回值
#算法狮们的心情?答:很开心!


多种匹配条件

字符功能
|匹配左右任意一个表达式(或)
(ab)将括号中字符作为一个分组(与)





我们拆解下正则表达式课程开始时的实例把;

# -*- coding:utf-8 -*-

import re

def is_phone(phone): #参数为手机号,如果格式正确返回true,不正确返回false
    phone_pat = re.compile('^(13\d|14[5|7]|15\d|166|17[3|6|7]|18\d)\d{8}$')
    res = re.search(phone_pat, phone)
    if not res:
        return False
    return True

正则表达式为:^(13\d|14[5|7]|15\d|166|17[3|6|7]|18\d)\d{8}$

这个表达式限制了开头和结尾,

^后面是开头条件:(13\d|14[5|7]|15\d|166|17[3|6|7]|18\d),

$前面是结尾条件:\d{8}

结尾条件很简单,\d标识任意一个数字,{8}代表要求挨着8个数字,结尾条件汇总为 连续的8个数字结尾;

再看开头条件:

()代表里面包含里面包含多个条件,每个|一个条件,

13\d,代表13+任意数字,14[5|7]代表145或147..以此类推,多个条件,满意其一就可以


标签:
Copyright © 2020 万物律动 旗下 AI算法狮 京ICP备20010037号-1
本站内容来源于网络开放内容的收集整理,并且仅供学习交流使用;
如有侵权,请联系删除相关内容;