首页 > 编程语言 >Python——正则表达式

Python——正则表达式

时间:2022-10-25 21:00:30浏览次数:59  
标签:oldboy 匹配 re Python res 正则表达式 print com

Python——正则表达式

前戏

'''
案例:京东注册手机号校验

基本需求:手机号必须是11位、手机号必须以13 15开头、必须是纯数字
'''
phone = input('请输入您的手机号>>>:').strip()
if len(phone) == 11:
    if phone.isdigit():
        if phone.startswith('13') or phone.startswith('15'):
            print('登录成功!')
else:
    print('格式错误')

字符组

'''
字符组默认匹配方式是挨个挨个匹配
'''
[0123456789]		# 匹配0到9任意一个数(全写)
[0-9]			   # 匹配0到9任意一个数(缩写)
[a-z]		      # 匹配26个小写英文字母
[A-Z]			   # 匹配26个大写英文字母
[0-9a-zA-Z]			# 匹配数字或者小写字母或者大写字母
# ps:字符组内所有的数据默认都是或的关系

量词

'''
正则表达式默认情况下都是贪婪匹配>>>:尽可能多的匹配
'''
* 		# 匹配零次或多次   默认是多次(无穷次)
+		# 匹配一次或多次   默认是多次(无穷次)
?		# 匹配零次或一次	  作为量词意义不大主要用于非贪婪匹配
{n}		# 重复n次
{n,}	# 重复n次或更多次	默认是多次(无穷次)
{n,m}	# 重复n到m次		  默认是m次
# ps:量词必须结合表达式一起使用 不能单独出现 并且只影响左边第一个表达式

特殊符号

'''
特殊符号默认匹配方式是挨个挨个匹配
'''
.			# 匹配除换行符以外的任意字符
\w			# 匹配数字、字母、下划线
\W			# 匹配非数字、非字母、非下划线
\d			# 匹配数字
^			# 匹配字符串的开头
$			# 匹配字符串的结尾
		#两者组合使用可以非常精确的限制匹配的内容
a|b			# 匹配a或者b(管道符的意思是或)
()			# 给正则表达式分组 不影响表达式的匹配功能
[]			# 字符组 内部填写的内容默认都是或的关系
[^]			# 取反操作 匹配除了字符组里面的其他所有字符
		# 注意上尖号在中括号内和中括号意思完全不同

练习


贪婪与非贪婪匹配

'''
所有的量词都是贪婪匹配如果想要变为非贪婪匹配只需要在量词后面加问号
'''
待匹配的文本
	<script>alert(123)</script>
待使用的正则(贪婪匹配)
	<.*>
请问匹配的内容
	<script>alert(123)</script> 一条
# .*属于典型的贪婪匹配 使用它 结束条件一般在左右明确指定
待使用的正则(非贪婪匹配)
	<.*?>

转义字符

'''
斜杠与字母的组合有时候有特殊含义
'''
\n     	   匹配的是换行符
\\n			匹配的是文本\n
\\\\n		匹配的是文本\\n
ps:如果是在python中使用 还可以在字符串前面加r取消转义

应用

'''
1.编写校验用户身份证号的正则
	 ^[1-9]\d{13,16}[0-9x]$
    ^[1-9]\d{14}(\d{2}[0-9x])?$
    ^([1-9]\d{16}[0-9x]|[1-9]\d{14})$
2.编写校验邮箱的正则
3.编写校验用户手机号的正则(座机、移动)
4.编写校验用户qq号的正则
'''

re模块

'''
在python中如果想要使用正则 可以考虑re模块 
'''
import re

# 常见操作方法
# res = re.findall('a', 'jason apple eva')
# print(res)  # 查找所有符合正则表达式要求的数据 结果直接是一个列表
# res = re.finditer('a', 'jason apple eva')
# print(res)  # 查找所有符合正则表达式要求的数据 结果直接是一个迭代器对象
# res = re.search('a', 'jason apple eva')
# print(res)  # <re.Match object; span=(1, 2), match='a'>
# print(res.group())  # a  匹配到一个符合条件的数据就立刻结束
# res = re.match('a', 'jason apple eva')
# print(res)  # None  匹配字符串的开头 如果不符合后面不用看了
# print(res.group())  # 匹配开头符合条件的数据 一个就结束
# obj = re.compile('\d{3}')  # 当某一个正则表达式需要频繁使用的时候 我们可以做成模板
# res1 = obj.findall('23423422342342344')
# res2 = obj.findall('asjdkasjdk32423')
# print(res1, res2)


ret = re.split('[ab]', 'abcd')  # 先按'a'分割得到''和'bcd',在对''和'bcd'分别按'b'分割
print(ret)  # ['', '', 'cd']

ret = re.sub('\d', 'H', 'eva3jason4yuan4', 1)  # 将数字替换成'H',参数1表示只替换1个
print(ret)  # evaHjason4yuan4

ret = re.subn('\d', 'H', 'eva3jason4yuan4')  # 将数字替换成'H',返回元组(替换的结果,替换了多少次)
print(ret)  # ('evaHjasonHyuanH', 3)

re补充

'''
1.分组优先
'''
	 # res = re.findall('www.(baidu|oldboy).com', 'www.oldboy.com')
    # print(res)  # ['oldboy']
    # findall分组优先展示:优先展示括号内正则表达式匹配到的内容
    # res = re.findall('www.(?:baidu|oldboy).com', 'www.oldboy.com')
    # print(res)  # ['www.oldboy.com']

    # res = re.search('www.(baidu|oldboy).com', 'www.oldboy.com')
    # print(res.group())  # www.oldboy.com
    # res = re.match('www.(baidu|oldboy).com', 'www.oldboy.com')
    # print(res.group())  # www.oldboy.com
'''
2.分组别名
'''
    res = re.search('www.(?P<content>baidu|oldboy)(?P<hei>.com)', 'www.oldboy.com')
    print(res.group())  # www.oldboy.com
    print(res.group('content'))  # oldboy
    print(res.group(0))  # www.oldboy.com
    print(res.group(1))  # oldboy
    print(res.group(2))  # .com
    print(res.group('hei'))  # .com

网路爬虫简介

'''
网络爬虫:通过编写代码模拟浏览器发送请求获取数据并按照自己指定的要求筛选出想要的数据
小练习:利用正则表达式筛选出红牛所有的分公司数据并打印或保存
    公司名称:
   	公司地址:
    公司邮编:
    公司电话:
'''

标签:oldboy,匹配,re,Python,res,正则表达式,print,com
From: https://www.cnblogs.com/HaiMan/p/16826304.html

相关文章

  • 正则表达式
    正则表达式一、正则表达式正则表达式是一些特殊的符号组合在一起产生一些特殊含义,它能帮助我们方便的检查一个字符串中符合条件的数据值。正则表达式线上测试网址:http:......
  • Python制作自动答题脚本,100%准确率,1秒10题提高效率 转载
    前言环境使用Python3.8Pycharm模块使用importrequests—>数据请求模块pipinstallrequestsimportparsel—>数据解析模块pipinstallparsel......
  • Selenium4.0+Python3系列(四) - 常见元素操作(含鼠标键盘事件)
    一、写在前面上篇文章介绍的是关于浏览器的常见操作,接下来,我们将继续分享关于元素的常见操作,建议收藏、转发!二、元素的状态在操作元素之前,我们需要了解元素的常见状态。......
  • 【python】待君有余暇,看春赏樱花,这不得来一场浪漫的樱花旅~
    ......
  • Python 文件
    1.读取整个文件我们首先在存放代码的位置下新建一个名为data的txt文件,并在里面存放一些数据。  【实例】:withopen("D:\Code\Python\data.txt",encoding='UTF-8')......
  • 正则表达式,re模块
    正则表达式正则表达式前戏我们日常生活中有很多地方都能用到正则表达式比如说我们登录的时候输的手机号其实内部需要校验是否是11位纯数字,是不是13,15,17,18,19开头的......
  • 正则表达式
    正则表达式描述正则表达式是一门独立的技术,所有的语言都可以使用它是利用一些特殊符号的组合或者直接写需要查找的字符来产生一些特殊的含义然后去给定的字符串中筛选出......
  • re模块和正则表达式
    内置模块之re模块re模块可以配合正则表达式使用。在很多网页中,要求输入手机号、邮箱等,会在我们还没输完的情况下就提示我们在“请输入正确的手机号”“邮箱格式不正确”......
  • 正则表达式
    内容概要购物车程序设计正则表达式字符组量词贪婪匹配与非贪婪匹配转义符正则表达式实战re模块简易爬虫题目购物车程序设计1.项目框架搭建空函数功能字典......
  • 学Python有什么好处?学习周期是多久?
    近几年,随着人工智能、大数据的快速发展,Python在国内越来越火,越来越多的人都开始学习Python;而在学习Python之前,很多小伙伴会问:学Python有什么好处?需要学多久?学Pyt......