爱根,正则表达式re模块。。。

就其本质而言,正则表达式(或 RE)是一种小型的、高度专业化的编程语言,(在Python中)它内嵌在Python中,并通过 re 模块实现。正则表达式模式被编译成一系列的字节码,然后由用 C 编写的匹配引擎执行。

字符匹配(普通字符,元字符):

1 普通字符:大多数字符和字母都会和自身匹配:

import reprint(re.findall("a","abc"))  #[‘a‘]

2 元字符:. ^ $ * + ? { } [ ] | ( ) \

  元字符之. ^ $ * + ? { }

import re

# ret = re.findall(‘a..in‘, ‘helloalvin‘)
# print(ret)  # [‘alvin‘]
#
# ret = re.findall(‘^a...n‘, ‘alvinhelloawwwn‘)
# print(ret)  # [‘alvin‘]
#
# ret = re.findall(‘a...n$‘, ‘alvinhelloawwwn‘)
# print(ret)  # [‘awwwn‘]
#
# ret = re.findall(‘a...n$‘, ‘alvinhelloawwwn‘)
# print(ret)  # [‘awwwn‘]
#
# ret = re.findall(‘abc*‘, ‘abcccc‘)  # 贪婪匹配[0,+oo]
# print(ret)  # [‘abcccc‘]
#
# ret = re.findall(‘abc+‘, ‘abccc‘)  # [1,+oo]
# print(ret)  # [‘abccc‘]
#
# ret = re.findall(‘abc?‘, ‘abccc‘)  # [0,1]
# print(ret)  # [‘abc‘]
#
# ret = re.findall(‘abc{1,4}‘, ‘abccc‘)
# print(ret)  # [‘abccc‘] 贪婪匹配

注意:前面的*,+,?等都是贪婪匹配,也就是尽可能匹配,后面加?号使其变成惰性匹配
# ret=re.findall(‘abc*?‘,‘abcccccc‘)# print(ret)  #[‘ab‘]
 
 

  元字符之字符集[]:

ret = re.findall(‘a[bc]d‘, ‘acd‘)
print(ret)  # [‘acd‘]

ret = re.findall(‘[a-z]‘, ‘acd‘)
print(ret)  # [‘a‘, ‘c‘, ‘d‘]

ret = re.findall(‘[.*+]‘, ‘a.c*d+‘)
print(ret)  # [‘.‘,‘*‘ ,‘+‘]

# 在字符集里有功能的符号: - ^ \

ret = re.findall(‘[1-9]‘, ‘45dha3‘)
print(ret)  # [‘4‘, ‘5‘, ‘3‘]

ret = re.findall(‘[^ab]‘, ‘45bdha3‘)
print(ret)  # [‘4‘, ‘5‘, ‘d‘, ‘h‘, ‘3‘]

ret = re.findall(‘[\d]‘, ‘45bdha3‘)
print(ret)  # [‘4‘, ‘5‘, ‘3‘]
ret = re.findall(‘[.\-*\^+\\\\]‘, r‘a.^c*d+-\\‘)   #代表后面是原生字符串,两个\,在显示的时候,解释器会将每个\转为\\显示出来。print(ret)                                          #[‘.‘, ‘^‘, ‘*‘, ‘+‘, ‘-‘, ‘\\‘, ‘\\‘]ret = re.findall(‘[.\-*\^+\\\\]‘, ‘a.^c*d+-\\‘)    #代表后面是一个\,因为没有加r来代表原生字符串。print(ret)                                          #[‘.‘, ‘^‘, ‘*‘, ‘+‘, ‘-‘, ‘\\‘]
ret = re.findall(‘[.\-*\^+\\\\]‘, r‘a.^c*d+-\m‘)print(ret)                                          #[‘.‘, ‘^‘, ‘*‘, ‘+‘, ‘-‘, ‘\\‘]ret = re.findall(‘[.\-*\^+\\\\]‘, r‘a.^c*d+-\\‘)print(ret)                                          #[‘.‘, ‘^‘, ‘*‘, ‘+‘, ‘-‘, ‘\\‘,‘\\‘]# ret = re.findall(‘[.\-*\^+\\\\]‘, ‘a.^c*d+-\m\‘)    #后面不能是\‘因为代表把‘也转义了。# print(ret)# ret = re.findall(‘[.\-*\^+\\\\]‘, r‘a.^c*d+-\m\‘)   #无论是否是原生字符串,\都有转义的功能,如上。# print(ret)ret = re.findall(‘[.\-*\^+\\\\]‘, ‘a.^c*d+-\m\\‘)   #字符串后面两个\\到解释器里转化为一个。print(ret)                                          #[‘.‘, ‘^‘, ‘*‘, ‘+‘, ‘-‘, ‘\\‘, ‘\\‘]ret = re.findall(‘[.\-*\^+\\\\]‘, r‘a.^c*d+-\a‘)    #加上r后,表明里面的\a不再有意义。print(ret)                                          #[‘.‘, ‘^‘, ‘*‘, ‘+‘, ‘-‘, ‘\\‘]ret = re.findall(‘[.\-*\^+\\\\]‘, ‘a.^c*d+-\a‘)     #这个\a代将无意义的a转化为有意义的了,所以判断不出来。print(ret)                                          #[‘.‘, ‘^‘, ‘*‘, ‘+‘, ‘-‘]
因为\\\\可以拆分为\\ \\,前两个\\交给解释器代表就是一个实实在在的\,然后后面两个代表他就是一个实实在在的\,通过两个实实在在的\\,代表就是转义出一个没有任何意义的\。
# ret=re.findall(‘c\l‘,‘abc\le‘)          #报错。# print(ret)#[]# ret=re.findall(‘c\\l‘,‘abc\le‘)         #报错。# print(ret)#[]ret=re.findall(‘c\\\\l‘,‘abc\le‘)         #[‘c\\l‘]print(ret)#[‘c\\l‘]ret=re.findall(r‘c\\l‘,‘abc\le‘)          #[‘c\\l‘]print(ret)#[‘c\\l‘]


元字符之转义符\

反斜杠后边跟元字符去除特殊功能,比如\.
反斜杠后边跟普通字符实现特殊功能,比如\d

\d  匹配任何十进制数;它相当于类 [0-9]。
\D  匹配任何非数字字符;它相当于类 [^0-9]。
\s  匹配任何空白字符;它相当于类 [ \t\n\r\f\v]。
\S  匹配任何非空白字符;它相当于类 [^ \t\n\r\f\v]。
\w  匹配任何字母数字字符;它相当于类 [a-zA-Z0-9_]。
\W  匹配任何非字母数字字符;它相当于类 [^a-zA-Z0-9_]
\b  匹配一个特殊字符边界,比如空格 ,&,#等

ret=re.findall(‘I\b‘,‘I am LIST‘)print(ret)#[]ret=re.findall(r‘I\b‘,‘I am LIST‘)print(ret)#[‘I‘]ret=re.findall(‘I\\b‘,‘I am LIST‘)print(ret)#[‘I‘]
 

元字符之分组()

m = re.findall(‘(ad)+‘, ‘addad‘)
print(m)    #[‘ad‘, ‘ad‘]
m = re.findall(‘\d+(?P<id>ad)+‘, ‘1234adadad‘)    #巨鸡巴蛋疼
print(m)    #[‘ad‘]
m = re.findall(r‘\d+(?:ad)+‘, ‘1234adadad‘)print(m)    #[‘1234adadad‘]
ret = re.search(‘(?P<id>\d{2})/(?P<name>\w{3})‘, ‘23/com‘)
print(ret.group())  # 23/com

ret=re.findall(‘www.(baidu|oldboy).com‘,‘www.oldboy.com‘)

print(ret)#[‘oldboy‘]     这是因为findall会优先把匹配结果组里内容返回,如果想要匹配结果,取消权限即可

ret=re.findall(‘www.(?:baidu|oldboy).com‘,‘www.oldboy.com‘)

print(ret)#[‘www.oldboy.com‘]

 

元字符之|

ret=re.search(‘(ab)|\d‘,‘rabhdg8sd‘)
print(ret.group())#ab

常用方法

# 1
a=re.findall(‘a‘, ‘alvin yuan‘)  # 返回所有满足匹配条件的结果,放在列表里
print(a)        #[‘a‘, ‘a‘]
# 2
a=re.search(‘a‘, ‘alvin yuana‘).group()  # 函数会在字符串内查找模式匹配,只到找到第一个匹配然后返回一个包含匹配信息的对象,该对象可以
                                         # 通过调用group()方法得到匹配的字符串,如果字符串没有匹配,则返回None。
print(a)        #a
a=re.search("a","12345")
# print(a.group())                      #报错。
# 3
a=re.match(‘a‘, ‘abcava‘).group()  # 同search,不过尽在字符串开始处进行匹配
print(a)
# 4
ret = re.split(‘[ab]‘, ‘abcd‘)  # 先按‘a‘分割得到‘‘和‘bcd‘,在对‘‘和‘bcd‘分别按‘b‘分割
print(ret)  # [‘‘, ‘‘, ‘cd‘]

# 5
ret = re.sub(‘\d‘, ‘abc‘, ‘alvin5yuan6‘, 1)     #只分割一次,并替换。
print(ret)             # alvinabcyuan6
ret = re.subn(‘\d‘, ‘abc‘, ‘alvin5yuan6‘)       #全部分割,并显示分割次数。
print(ret,type(ret))   #‘alvinabcyuanabc‘, 2)

# 6
obj = re.compile(‘\d{3}‘)
ret = obj.search(‘abc123eeee‘)
print(ret.group())  # 123
                                 得到一个迭代器ret = re.finditer(‘\d‘, ‘ds3sy4784a‘)           #得到一个迭代器。
print(ret)  # <callable_iterator object at 0x10195f940>

print(next(ret).group())
print(next(ret).group())

高阶实验

#匹配出所有的整数
ret=re.findall(r"-?\d+\.\d*|(-?\d+)","1-2*(60+(-40.35/5)-(-4*3))")
ret.remove("")
print(ret)        #[‘1‘, ‘-2‘, ‘60‘, ‘5‘, ‘-4‘, ‘3‘]

ret=re.findall(r"-?\d+\.\d*|(?:-?\d+)","1-2*(60+(-40.35/5)-(-4*3))")
print(ret)        #[‘1‘, ‘-2‘, ‘60‘, ‘-40.35‘, ‘5‘, ‘-4‘, ‘3‘]

ret=re.findall(‘(ab)|\d‘,‘rabhdg8sd‘)
print(ret)          #[‘ab‘, ‘‘]
ret.remove("")
import re

print(re.findall("<(?P<tag_name>\w+)>\w+</(?P=tag_name)>","<h1>hello</h1>"))   #引用?P
print(re.search("<(?P<tag_name>\w+)>\w+</(?P=tag_name)>","<h1>hello</h1>"))
print(re.search(r"<(\w+)>\w+</\1>","<h1>hello</h1>"))                #引用/1
时间: 2024-11-01 00:17:45

爱根,正则表达式re模块。。。的相关文章

Python文件交互,模块与Pickle序列化,正则表达式re模块

先说点其他的. sudo       以超级权限运行命令 su         切换到root用户 sudo su    以超级权限切换到root用户 这是他们之间的区别. 文件的读取: f = file('abc.txt') 与f = open('abc.txt')方法一样. f = file('abc.txt',w)打开一个写文件,不带参数默认打开一个读文件. 模式有: r ## w ## a ## rw ## rb ## wb ## ab## f.read() 返回字符串 f.readli

常用模块--- 正则模块 正则表达式 re 模块

# 正则模块# 正则表达式# re模块 #--------------------------------------- time -----------------------------------------# 计算时间差# 做时间格式的转换 # 所有的模块要经历的两个步骤 # 要操作的概念本身 : 正则表达式 时间 # 使用模块去操作它 : re time # 学习 正则表达式 本身 # 什么是正则表达式 # 一种匹配字符串的规则 # input 一串数据 : # 是不是qq号码 : 全

Python基础13_正则表达式,re模块,

一. 正则表达式 正则表达式,又称规则表达式.(英语:Regular Expression,在代码中常简写为regex.regexp或RE),计算机科学的一个概念.正则表达式通常被用来检索.替换那些符合某个模式(规则)的文本. 正则表达式由普通字符和元字符组成, 普通字符包含大小写字母, 数字. 在匹配普通字符的时候我们直接写就可以了 元字符是正则表达式的灵魂 1. 字符组 字符组用[]括起来, 在[]中的内容会被匹配 [a-zA-Z0-9]    表示所有的数字字母 2. 简单元字符 .   

python 正则表达式re模块

#####################总结##############    优点:  灵活, 功能性强, 逻辑性强.               缺点:  上手难,旦上手, 会爱上这个东西       工具: 各大文本编辑器一般都有正则匹配功能. 我们也可以去 http://tool.chinaz.com/regex/进行在线测试. 正则表达式由普通字符和元字符组成,普通字符包含大小写字母, 数字,在匹配普通字符的时候我们直接写就可以了 (1) 字符组  字符组很简单用[]括起来,在[]中

Python常用模块——正则表达式re模块

Python常用模块--正则表达式re模块 引子 请从以下文件里取出所有的手机号 姓名 地区 身高 体重 电话 况咏蜜 北京 171 48 13651054608 王心颜 上海 169 46 13813234424 马纤羽 深圳 173 50 13744234523 乔亦菲 广州 172 52 15823423525 罗梦竹 北京 175 49 18623423421 刘诺涵 北京 170 48 18623423765 岳妮妮 深圳 177 54 18835324553 贺婉萱 深圳 174 5

爱根,你消失一天,我如坠深渊!!!模块讲解,苑之恨!!!

time模块 在Python中,通常有这三种方式来表示时间:时间戳.元组(struct_time).格式化的时间字符串:(1)时间戳(timestamp) :通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量.我们运行"type(time.time())",返回的是float类型. (2)格式化的时间字符串(Format String): '1988-03-16'. (3)元组(struct_time) :struct_time元组共有9个元素共九个元素:

7.python之正则表达式re模块

一.re模块的常用方法: re.findall() 用于返回一个字符串中,所有能被正则表达式所匹配到的字符串,以列表的方式返回. 用法re.findall(正则表达式,字符串). s1 = "sadjhjafdsajkhjsdaysadsadduayu" 比如说,想要从上面这一长串字符串中,匹配出a后面有一个任一字符在紧接着一个字母u的字符串. print re.findall('a.u',s1) >>>['ayu'] re.finditer()作用和findall一

python之路 正则表达式,模块导入的方法,hashlib加密

一.正则表达式re python中re模块提供了正则表达式相关操作 字符: . 匹配除换行符以外的任意字符 \w 匹配字母或数字或下划线或汉字 \s 匹配任意的空白符 \d 匹配数字 \b 匹配单词的开始或结束 ^ 匹配字符串的开始 $ 匹配字符串的结束 次数: * 重复零次或更多次 + 重复一次或更多次 ? 重复零次或一次 {n} 重复n次 {n,} 重复n次或更多次 {n,m} 重复n到m次 模式 描述 ^ 匹配字符串的开头 $ 匹配字符串的末尾. . 匹配任意字符,除了换行符,当re.DO

python基础-匿名函数、内置函数、正则表达式、模块

1. 匿名函数 1.1 有名函数 有名函数:定义了一个函数名,函数名指向内存地址:通过函数名进行访问.函数名加括号就可以运行有名函数,例如:func() def func(x, y, z = 1): return x + y + z print(func(1,5,2)) 1.2 匿名函数 匿名函数:没有名字的函数,定义的时候不需要函数名:定义匿名函数的关键字是:lambda 特点: 1.没有函数名 2.函数自带return 应用场景: 1.应用于一次性的地方 2.临时使用 salaries={