python 如何使用正则表达式(十六)

python中,如何使用正则表达式?
  (1)原生模块: re模块(与python解释器直接绑定的,不需要另行下载pip)
  (2)被提取的数据文本,他们都是string字符串类型

  作用:
  1) 爬虫- 提取数据,只是辅助作用,jsonpath,xpath。
  2) 后端- 路由的设置url,检验用户的,规范匹配。

注意:正则表达式不属于python,是一个跨语言的。

import re

re.match(pattern, string, flags=0)

 说明:第一个参数:正则表达式,第二个参数:提取的字符串,   最终返回匹配的结果对象

    re.match(r'正则表达式(字符串)','要提取的字符串')

result=re.match(r'hello','hello,mike')
print(result)
print(result.group())  # group()方法用来提取匹配成功之后的部分
#如果匹配成功,那么就返回 : <re.Match object; span=(0, 5), match='hello'>

# result=re.match(r'hello3','hello,mike')
# print(result)
#如果匹配不成功,那么就返回 : None

(一) 匹配单个字符

#(1) \d  只能是任意一位数字
#只能匹配1-5的数字哦!,其他就不符合要求!
# result=re.match(r'熊出没\d','熊出没6')
# print(result)
# print(result.group())

#(2) [] 匹配[]中列举的单个字符
# result=re.match(r'熊出没[1-5]','熊出没6')
# print(result)
# print(result.group())

#大写 ABCDE [A-E]
#小写 abcde [a-e]
# result=re.match(r'熊出没[a-e]','熊出没e')
# print(result)
# print(result.group())

# 注册一个用户名 大写字母 小写字母 数字 下划线
#[A-Za-z0-9_] 等同于> \w
# result=re.match(r'熊出没\w','熊出没A_')
# print(result)
# print(result.group())

# \s  匹配空白, 即 空格 和 tab 键
# result=re.match(r'熊出没\w\s','熊出没V ')
# print(result)
# print(result.group())

# (重点) . 匹配任意1个字符(除了\n之外换行)  .*?
result=re.match(r'熊出没.','熊出没V $')
print(result)
print(result.group())

(二) 匹配多个字符

#熊出没中的数字匹配1位或2位数字
# result=re.match(r'熊出没\d{1,2}','熊出没15')
# print(result)
# print(result.group())

#手机号码11位数字
# result=re.match(r'\d{11}','1389632456')  #10位数字,匹配不成功
# result=re.match(r'\d{11}','138963245612')  #12位数字,匹配成功,有问题? 没有判断结尾,,,提前匹配结束...
# print(result)
# print(result.group())

'''
重点:
{1,9} 代表他前面那个字符可以出现1-9位   数量
{11}   代表他前面那个字符可以出现11位   数量
'''

#电话号码=>区号-座机号(注意:-可有可无)使用?
#比如: 010-98765432  or  01098765432
# result=re.match(r'010-?\d{8}','010-98765432')
# result=re.match(r'010-?\d{8}','01098765432')
# result=re.match(r'\d{3,4}-?\d{8}','0571-98765432')
# print(result)
# print(result.group())

#如果是多个--,那么就使用*
# result=re.match(r'\d{3,4}-*\d{8}','0571--98765432')
# print(result)
# print(result.group())


#.无法匹配换行符哦
hello='''hello,mike
hello,john
hello,chinese
'''
# result = re.match(r'.*',hello)
# .匹配任务字符 *无数次 >>>  re.S 这个参数 可以匹配到换行符
result = re.match(r'.*',hello,re.S)
print(result)
print(result.group())



# result=re.match(r'.*','''0571-
#                 98765432''',re.S)
# print(result)
# print(result.group())

#如果使用+,那么-至少出现1次哦!
result=re.match(r'\d{3,4}-+\d{8}','057198765432')
print(result)
print(result.group())

# 这些数字必须有,,不确定数量 >>> 以为着没有数字的话,  是需要匹配不成功
# result = re.match(r'www.baidu.com/\d+', 'www.baidu.com/98765432')

(三) 匹配开头结尾

# ^熊,必须以熊字开头哦!
# 没$ 必须以没字开头哦!
# result=re.match(r'^熊出没$','熊出没')
# print(result)
# print(result.group())

#昵称:
# 1.必须是由字母,数字,下划线组成
# 2.不能以数字开头
while True:
    name =input('输入昵称:')
    #有且至少有一个开头,[a-zA-Z_0-9]可以没有,也可以有多位 * +?
    # result = re.match(r'[a-zA-Z_][a-zA-Z_0-9]*',name)

    #(2)注意,必须要加上结尾符号哦!$
    result = re.match(r'[a-zA-Z_][a-zA-Z_0-9]*$',name)
    # print(result)
    if result:
        print(f'{name} 符合规范的!')
        # print(result.group())
    else:
        print(f'{name} 必须是由字母,数字,下划线组成.不能以数字开头!')

#注意:match默认匹配开头,没有匹配结尾
# 输入昵称:my#a
# my#a 符合规范的!
# my

(三) 匹配分组

案例1:验证QQ邮箱是否符合?123456@qq.com
       1)数字必须在5到12位
       2)q大小不区分
import re
while True:
    email =input('please input the email:')
    # 此时的.代表不是点本身,而是单个字符的匹配
    result =re.match(r'\d{5,12}@[qQ]{2}.com$',email)
    #   此时的\.代表是点本身
    # result =re.match(r'\d{5,12}@[qQ]{2}\.com$',email)
    if result:
        print(f'{email}正确!显示:{result.group()}')
    else :
        print(f'{email}有误!')

说明:

. * ? [] \ 等等这些 在正则表达式里面有特殊作用的字符,
注意:
  仅仅代表自己本身, 前面加上一个反斜杠\; 那么就使用\* ==>*   \.==>.

案例2:除了验证QQ邮箱还可以网易邮箱呢? 选其中一个哦

 (1) [qQ]{2}|163 >> 选其中一个

 (2) 范围的描述 >>进行分组() ([qQ]{2}|163),选取的范围

while True:
    email =input('please input the email:')
    # 此时的.代表不是点本身,而是单个字符的匹配
    result =re.match(r'\w{4,12}@([qQ]{2}|163)\.com$',email)
    if result:
        # print(f'{email}正确!显示:{result.group()}') #group()没有参数时,提取满足正则表达式所有的数据
        print(f'{email}正确!显示:{result.group(1)}')  #group()有参数时,  提取()第一个分组的数据
    else :
        print(f'{email}有误!')

 

说明:提取关键字 QQ or 163 
     正则表达式()>分组,可以提取特殊数据

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值