python re模块导入_Python正则re模块使用步骤及原理解析

news/2024/7/7 10:16:04

python中使用正则表达式的步骤:

1.导入re模块:import re

2.初始化一个Regex对象:re.compile()

3.刚刚创建的Regex对象调用search方法进行匹配,返回要给March对象

4.刚刚的March对象调用group方法,展示匹配到的字符串

下面例子的知识点:

对正则表达式分组用:(),正则里的分组计数从1开始,不是从0,切记~~group(数字):去对应的分组的值

groups():返回所有分组的元组形式

\d表示一个数字regex_obj = re.compile(r'(\d\d\d)-(\d\d\d)-(\d\d\d\d)')

match_obj = regex_obj.search('我司电话:035-411-1234')

result1 = match_obj.group(1)

result2 = match_obj.group(2)

result3 = match_obj.group(3)

print(result1)

print(result2)

print(result3)

result4 = match_obj.group()

print(result4)

result5 = match_obj.groups()

print(result5)

执行结果:035

411

1234

035-411-1234

('035', '411', '1234')

补充知识点:\w表示一个单词,\s表示一个空格regex_obj = re.compile(r'(\d\w\d)-(\d\d\d)-(\d\d\d\d)')

match_obj = regex_obj.search('我司电话:0a5-411-1234')

result = match_obj.group(1)

print(result)

regex_obj = re.compile(r'(\d\w\d)-(\d\d\d)-(\d\d\d\d)')

match_obj = regex_obj.search('我司电话:0哈5-411-1234')

result = match_obj.group(1)

print(result)

regex_obj = re.compile(r'(\d\s\d)-(\d\d\d)-(\d\d\d\d)')

match_obj = regex_obj.search('我司电话:0 5-411-1234')

result = match_obj.group(1)

print(result)

执行结果:0a5

0哈5

0 5

| 或:regex_obj = re.compile(r'200|ok|successfully')

match_obj1 = regex_obj.search('vom get request and stored successfully')

result1 = match_obj1.group()

print(result1)

match_obj2 = regex_obj.search('vom get request,response 200 ok')

result2 = match_obj2.group()

print(result2)

match_obj3 = regex_obj.search('vom get request,response ok 200')

result3 = match_obj3.group()

print(result3)

执行结果:successfully

200

ok

注意:如果search返回的March对象只有一个结果值的话,不能用groups,只能用groupregex_obj = re.compile(r'200|ok|successfully')

match_obj1 = regex_obj.search('vom get request and stored successfully')

result2 = match_obj1.groups()

print(result2)

result1 = match_obj1.group()

print(result1)

执行结果:()

successfully

? :可选匹配项

+ :1次 或 n次 匹配

* :*前面的字符或者字符串匹配 0次、n次

注意:*前面必须要有内容

regex_obj = re.compile(r'(haha)*,welcome to vom_admin system') 指haha这个字符串匹配0次或者多次

regex_obj = re.compile(r'(ha*),welcome to vom_admin system') 指ha这个字符串匹配0次或者多次

. : 通配符,匹配任意一个字符

所以常常用的组合是:.*regex_obj = re.compile(r'(.*),welcome to vom_admin system')

match_obj1 = regex_obj.search('Peter,welcome to vom_admin system')

name = match_obj1.group(1)

print(name)

执行结果:

Peter

{} : 匹配特定的次数

里面只写一个数字:匹配等于数字的次数

里面写{3,5}这样两个数字的,匹配3次 或 4次 或 5次,按贪心匹配法,能满足5次的就输出5次的,没有5次就4次,4次也没有才是3次regex_obj = re.compile(r'((ha){3}),this is very funny')

match_obj1 = regex_obj.search('hahahaha,this is very funny')

print("{3}结果",match_obj1.group(1))

regex_obj = re.compile(r'((ha){3,5}),this is very funny')

match_obj1 = regex_obj.search('hahahaha,this is very funny')

print("{3,5}结果",match_obj1.group(1))

执行结果:{3}结果 hahaha

{3,5}结果 hahahaha

findall():返回所有匹配到的字串的列表regex_obj = re.compile(r'\d\d\d')

match_obj = regex_obj.findall('我是101班的,小李是103班的')

print(match_obj)

regex_obj = re.compile(r'(\d\d\d)-(\d\d\d)-(\d\d\d\d)')

match_obj = regex_obj.findall('我家电话是123-123-1234,我公司电话是890-890-7890')

print(match_obj)

打印结果:['101', '103']

[('123', '123', '1234'), ('890', '890', '7890')]

[]:创建自己的字符集:

[abc]:包括[]内的字符

[^abc]:不包括[]内的所有字符

也可以使用:[a-zA-Z0-9]这样简写

regex_obj = re.compile(r'[!@#$%^&*()]')

name = input("请输入昵称,不含特殊字符:")

match_obj = regex_obj.search(name)

if match_obj:

print("昵称输入不合法,包含了特殊字符:", match_obj.group())

else:

print("昵称有效")

执行结果:请输入昵称,不含特殊字符:*h

昵称输入不合法,包含了特殊字符: *

^:开头

$:结尾regex_obj = re.compile(r'(^[A-Z])(.*)')

name = input("请输入昵称,开头必须大写字母:")

match_obj = regex_obj.search(name)

print(match_obj.group())

执行结果:请输入昵称,开头必须大写字母:A1234

A1234

sub():第一个参数为要替换成的,第二个参数传被替换的,返回替换成功后的字符串regex_obj = re.compile(r'[!@#$%^&*()]')

match_obj = regex_obj.sub('嘿','haha,$%^,hahah')

print(match_obj)

执行结果:

haha,嘿嘿嘿,hahah

补充一下正则表达式的表,正则太复杂了,要常看常用才能熟练

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


http://www.niftyadmin.cn/n/4058281.html

相关文章

面试题4:二维数组的查找

一、题目 在一个二维数组中,每一行都按照从左到右递增的顺序排序。每一列都按照从上到下递增的顺序排序,请完成一个函数,输入这样的一个二维数组和一个整数,判断数组是否含有该整数。 二、算法分析 一个从左到右,从…

6脉冲触发器脉冲缺失_脉冲袋式除尘器6个主要构件特点及5个常见问题及处理措施...

随着国家环保要求越来越高,对大气粉尘污染的严格管控,除尘设备在多领域得到大量应用,在防治粉尘污染、改善作业环境、实现烟气达标排放方面发挥着很大作用。本文分享脉冲袋式除尘器6个主要构件特点及5个常见问题及处理措施。1.脉冲袋式除尘器…

快速排序及五种优化(模板)

1、快速排序的基本思想: 快速排序排序使用分治的思想,通过一趟排序将待排序列分割成两部分,其中一部分记录的关键字均比另一部分记录的关键字小。之后分别对这两部分记录继续进行排序,递归地以达到整个序列有序的目 2、快速排序…

SCAU 汇编语言 期末复习 (上)

第一章 1.储存单位 存储容量:bit 、Byte、 Word 1 kilobytes210bytes1024bytes 1megabyte(MB)220bytes 1gigabyte(GB)230bytes 1terabyte(TB)240bytes 1petabyte250bytes 1exabyte260bytes 1zettabyte270bytes 1yottabyte280bytes 2个字节: Word &#…

双光耦开关电源电路图_六款简单的开关电源电路设计原理图详解

简单的开关电源电路图(一) 简单实用的开关电源电路图调整C3和R5使振荡频率在30KHz-45KHz。输出电压需要稳压。输出电流可以达到500mA.有效功率8W、效率87%。其他没有要求就可以正常工作。简单的开关电源电路图(二)24V开关电源,是高频逆变开关电源中的一个种类。通过…

序列容器vector和迭代器

一、容器vector vector类模板提供了一种占用连续内存地址的数据结构。这使得它可以高效,直接的利用下标运算符[]访问vector中的任一元素,当一个vecto的内存空间耗尽时,它会分配一个更大的连续空间(数组),把…

SCAU 软件工程 期末复习

软件发展阶段 程序设计阶段——50至60年代 程序系统阶段——60至70年代 软件工程阶段——70年代以后 软件工程的生命周期 1.需求分析(RequirementsCapture) 2.系统分析与设计(SystemAnalysis and Design) 3.系统实现&#…

年轻工程师怎样修炼成为“高手”

本人做过技术开发工作多年,从焊电路板的小工程师逐渐做到项目经理、研发经理,现在做到总工程师,作为工程师有亲身的感受,作为研发主管,对工程师的性格、心理和知识结构有非常深入的了解,现在把自己的一点感…