正则表达式以及模块

本文介绍了正则表达式的基本概念和在Python中的应用,包括匹配规则如元字符、字符组、量词,以及在re模块中的使用,如findall、search和match方法。还讨论了分组和贪婪/非贪婪匹配的概念。
摘要由CSDN通过智能技术生成

正则表达式:

#!/usr/local/bin/python3
# -*- coding: utf-8 -*-
# @Time    : 2023/5/16 0:47
# @File    : 初始正则表达式.py
# @Software: PyCharm
"""
正则表达式:

正则表达式就是一种规则。可以理解为一种匹配的规则。

为什么要有正则表达式:
1:进行匹配  匹配一个人的电话号码,匹配一个人身份证 匹配一台机器的ip地址
2: 进行搜索 爬虫中使用
3:我们进行表单验证时候需要正则表达式

正则规则:(元字符)
第一条规则:本身就是一个字符,就匹配字符串哪一个字符
第二条规则:字符组[字符]    待匹配里面有什么,里面有什么就匹配什么,一个字符组就代表匹配一个字符。
用法:字符组可以使用范围  所有的范围遵循混ASCII码来匹配
[0-9],[a-z],[A-Z]

#[0-9] \d 表示0 到9之间任意一个数据
#在正则表达式里面 \d  --->  \ 是转义符,转移了d 让d可以匹配0-9之间所有的数


\w:(word)表示数字字母下划线
\t :表示制表符号 专门
\n :专门匹配换行符号
\s :匹配所有的空格,制表符
\D : 表示所有的非数字
\W:匹配除了字母数字下划线的所有字符
\S:匹配非空格,制表符

[\d] [0-9] \d  没有区别:都是要匹配一位数字

[\D \d] [\W \w] [\S \s] 所有都可以匹配

. 表示除了换行符之外的所有的内容

#[]字符组  [^] 非字符组

#字符组:只要在中括号内所有字符都是符合规则的字符
#非字符组:只要在中括号内所有字符都是不符合规则的字符

# ^  表示一个字符的开始
# $  表示一个字符的结束
# ^ $ 约束以匹配的字符串开头或者约束匹配的字符串结尾

# | 匹配遇到相同部分,匹配完成就自动结束,我们一般将长的放在前面,短的放在后面 (或方法)
# () 分组的作用,给定的一部分进行指正则规定分组。


量词: 求十一位数的手机号码,约束字符出现的次数
我们学习量词需要掌握如下:
{n} 表示只能出现n次
{n,}至少出现n次
{n,m}至少出现n次,之多出现m次
? 表示匹配0次或一次  表示可有可无,但是有只能有一个,比如小数点
\ + 表示匹配一次或者多次
\ * 表示匹配0次或者多次 表示可有可无,但是有可以是多个存在


手机号码匹配:1[3-9]\d{9}
至少匹配:1[3-9]\d{9,}

匹配任意的两位整数 \d{2}
匹配任意保留两位的小数: \d.\d{2}
匹配任意保留两位的小数,整数部分有多个 \d+.\d{2}
#匹配零次: \d?
#匹配任意一个整数或小数:\d+.\d+|\d+ 或者   \d+\.?\d+
#贪婪匹配:
\d{7,12} 总是在符合量词的范围内尽量多匹配,匹配越多越好
#回溯算法:在正则表达式里面的贪婪匹配,里面实现回溯算法。

#修改贪婪模式:非贪婪匹配:惰性匹配:总是匹配符条件范围内尽量小的字符串 :\d{3,4}? 非贪婪模式

#\d+?3   以3结尾就结束。一遇到3就会结束。

#.*?x 匹配任意的内容,遇到x就结束。
元字符
元字符 量词
元字符 量词  ? 量词后面表示非贪婪匹配

身份证:
15 位数:全数字, 首位不为0
18位数,前17位数是全数字,首位不能为0,最后一位是x和数字
[1-9](\d{16}[\dx]|\d{14})
[1-9]\d{14}(\d{2}[\dx])?

"""

re模块

import re
ret = re.findall("\d","alex83")
ret1 = re.findall("\d+","alex83")
ret2 = re.findall("^\d+","alex83")
#findall 方法会匹配字符串中所有符合规则的项,返回一个空列表
print(ret)
print(ret1)
print(ret2)

ret4 = re.search("\d+","alexdm12314")
print(ret4)
#匹配成功就返回一个对象,实现group方法。从头到位进行匹配第一个符合条件的项

print(ret4.group())


r = re.match("\d", '1alex83')
r1 = re.match("\d", 'alex83')
#match只能从头开始匹配。如果开头有符合的,才会匹配成功,返回一个对象,否则返回None
print(r.group())
print(r1)

#finditer方法
import re
#finditer 拿到一个迭代器对象,通过for循环来获取迭代器对象的匹配的值。。
ret2 = re.finditer('\d+',"234sdfdf4")
for i in ret2:
    print(i.group())

re 模块和分组处理

s1 = '<h1>wahaha</h1>'
s2 = '<a>wahaha ya wahaha</a>'
import re
ret = re.search("<(\w+)>(.*?)</\w+>",s1)
print(ret.group())
print(ret.group(1))
print(ret.group(2 ))

#我们可以对想要的内容进行分组
ret2 = re.search("<(?P<p1>\w+)>(?P<content>.*?)</\w+>",s2)
#分组取名字

print(ret2)
print(ret2.group())
print(ret2.group('p1'))
print(ret2.group('content'))

#分组命令的规则:(?P<name>正则表达式)

split方法

会按照匹配的正则规则将进行划分
import re
ret = re.split('\d+','bank110obje00jenkins')
print(ret)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

土豆爱牛肉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值