python中的正则表达式

在python中用正则表达式对字符串进行匹配的时候可用使用re模块

首先需要导入re模块: import re

使用过程如下:

# 导入re模块
import re

# 使用match方法进行匹配操作
result = re.match(正则表达式,要匹配的字符串)
 # 如果上一步匹配到数据的话,可以使用group方法来提取数据
 result.group()

1、单字符匹配

注意:[]不管中括号里面有多少东西,但都是匹配一个

示例:

re.match(r"[hH]ello", "Hello world")

ret = re.match(r"速度与激情\d", "速度与激情8")
ret.group()

re.match(r"速度与激情[1-8]", "速度与激情3")

re.match(r"速度与激情[1-8abcd]", "速度与激情8").group()

re.match(r"速度与激情.", "速度与激情A").group()

2、匹配多个字符

示例:

re.match(r"\d{11}", "12345678901").group() #匹配11位数字

re.match(r"021-\d{8}", "021-12345678").group()#匹配带_的数字号码
re.match(r"021-?\d{8}", "02112345678").group() #匹配_可有可无的电话号码

re.match(r"\d{3,4}-?\d{7,8}", "0532-1234567").group() #匹配_前可三位可四位,_后可7位可8位的电话号码

3、匹配开头结尾 

 

 

示例:

匹配邮箱
re.match(r"[a-zA-Z0-9_]{4,20}@163.com", "laowang@163.comcom")      #错误的,如 
                                                        # laowang@163.comcom  仍匹配成功

re.match(r"[a-zA-Z0-9_]{4,20}@163.com$", "laowang@163.comcom")    #匹配到结尾,就可以排除如 
                                                        # laowang@163.comcom 这类错误

#如果在正则表达式中需要用到某些普通的字符,比如 .  ? 等,仅仅需要在他们前面添加一个反斜杠进行转义

re.match(r"[a-zA-Z0-9_]{4,20}@163\.com$","laowang@163.comcom")

示例:判断变量是否符合要求

import re


def main():
	names = ["age", "_age", "1age", "age1", "a_age", "age_1_", "age!", "a#123", "__________"]
	for name in names:
		# ret = re.match(r"[a-zA-Z_][a-zA-Z0-9_]*", name)
		# ^规定开头  $规定结尾  
		# python中的match默认是从头开始判断的所以,在match中可以不写^,但是match不会判断结尾,所以
		# 当需要以xxx结尾的时候 还需要写上$
		ret = re.match(r"^[a-zA-Z_][a-zA-Z0-9_]*$", name)
		if ret:
			print("变量名:%s 符合要求....通过正则匹配出来的数据是:%s" % (name, ret.group()))
		else:
			print("变量名:%s 不符合要求...." % name)


if __name__ == "__main__":
	main()

 

4、匹配分组 

 

 

示例1:匹配0-100之间的数字

ret = re.match("[1-9]?\d$|100","8")
print(ret.group())  # 8

ret = re.match("[1-9]?\d$|100","78")
print(ret.group())  # 78

ret = re.match("[1-9]?\d$|100","08")
# print(ret.group())  # 不是0-100之间

ret = re.match("[1-9]?\d$|100","100")
print(ret.group())  # 100
示例2:匹配163、126邮箱
re.match(r"([a-zA-Z0-9_]{4,20})@(163|126)\.com$","laowang@163.comcom").group(1)
 #如果想取第一个括号里匹配成功后的东西则group(1),如果想取第二个括号里面的东西则group(2)
 这就是分组
示例3:给分组取别名

html_str = "<body><h1>hahahah</h1></body>"
re.match(r"<(?P<p1>\w*)><(?P<p2>\w*)>.*</(?P=p2)></(?P=p1)>", html_str).group()

 

5、re模块的高级用法

  (1)search

search功能与match功能的区别就是:search不用从头开始匹配。返回的是第一个匹配到的内容

re.search(r"\d+", "阅读次数为 9999, 点赞数为:100").group()  # 9999

   (2)findall 

findall是直接返回匹配到的所有内容

#coding=utf-8
import re

ret = re.findall(r"\d+", "python = 9999, c = 7890, c++ = 12345")
print(ret)

运行结果:[9999,7890,12345]

   (3)sub 将匹配到的数据进行替换

re.sub(r"\d+", '998', "python = 997")  # python=998

 

示例:将匹配到的阅读次数+1

#coding=utf-8
import re

def add(temp):
    strNum = temp.group()
    num = int(strNum) + 1
    return str(num)

ret = re.sub(r"\d+", add, "python = 997")  # python = 998
print(ret)

ret = re.sub(r"\d+", add, "python = 99")   # python = 100
print(ret)

(4)split根据匹配进行切割字符串,并返回一个列表

 

需求:切割字符串“info:xiaoZhang 33 shandong”

#coding=utf-8
import re

ret = re.split(r":| ","info:xiaoZhang 33 shandong")
print(ret)

运行结果:
['info', 'xiaoZhang', '33', 'shandong']

练习题

匹配里面的文本

html_str = """
<dd class="job_bt">
        <h3 class="description">职位描述:</h3>
        <div>
        <p>职位诱惑:<br>机器学习相关项目,完全新技术驱动,互联网公司,工作氛围好,扁平管理,有技术大牛带<br><br>职位描述:<br>配合架构师和机器学习专家,完成项目的编码、测试和上线。<br><br>我们期望:<br>1.&nbsp;211院校计算机相关专业本科以上学历;<br>2.&nbsp;有扎实的编程和计算机基础,熟悉常用算法和数据结构。<br>3.&nbsp;具有很强的问题解决能力,综合知识(或者通过搜索能快速掌握知识)强,了解前端、网络、多线程、数据库、Web开发等知识。<br>4.&nbsp;2年以上工作经验(Python或者JAVA方向,如果编程能力特别过硬可以放开语言要求);<br><br>工作内容:<br>1.&nbsp;根据业务需求进行需求分析和代码编写;<br>2.&nbsp;结合系统实现对代码进行充分的自测,以及配合测试工程师联合进行测试;<br>3.&nbsp;配合机器学习算法专家进行代码编写</p>
        </div>
    </dd>
"""

re.sub(r"<[^>]*>|\s", "", html_str)
re.sub(r"<[^>]*>|\s|&nbsp;", "", html_str)

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值