锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

52、re模块

时间:2023-11-13 22:07:02 二极管模块mee75

一.re模块

1.什么是正则?

正则是将一些具有特殊意义的符号(称为正则表达式)来描述字符或字符串的方法。或者:正则是描述一种事物的规则。(在Python中)它内嵌在Python中,并通过 re 模块实现。将正则表达模式编译成一系列字节码,然后使用 C 执行编写的匹配引擎。

元字符 匹配内容
\w 匹配字母(包括中文)或数字或下划线
\W 匹配非字母(包括中文)或数字或下划线
\s 匹配任何空白符
\S 匹配任何非空白符
\d 匹配数字
\D 匹配非数字
\A 从字符串开始匹配
\z 匹配字符串的结尾,如果是换行,只匹配换行前的结果
\n 匹配换行符
\t 匹配制表符
^ 开始匹配字符串
$ 匹配字符串的结尾
. 匹配任何字符,除了换行符,当re.DOTALL当标记被指定时,包括换行符在内的任何字符都可以匹配。
[…] 匹配字符组中的字符
[^…] 匹配除了字符组中的字符的所有字符
* 左边匹配0个或多个字符。
左边匹配一个或多个字符。
非贪婪的方式是匹配0个或1个左边的字符。
{n} 准确匹配n前表达式。
{n,m} 匹配n到m其次是前面正则表达式定义的片段,贪婪的方式
ab 匹配a或者b
() 匹配括号中的表达式也表示组

------------------------------------------------匹配模式----------------------------------------------------

我们现在配合正则表达式进行测试

1.字符串常用操作:一对一匹配

s1 = 'meet郭宝元' print(s1.find('宝元')) 

2.正则匹配

\w 匹配中文、字母、数字、下划线

import re name = "宝元-meet_123 " print(re.findall("\w",name)) #结果 ['宝', '元', 'm', 'e', 'e', 't', '_', '1', '2', '3'] 

\W 中文、字母、数字、下划线不匹配

import re name = "宝元-meet_123 " print(re.findall("\W",name)) # 结果 ['-',' '] 

\s 匹配任意的空白符

import re
name = "宝元-meet_123 "
print(re.findall("\s",name))
# 结果
[' ']

\S 匹配不是任意的空白符

import re
name = "宝元-meet_123 "
print(re.findall("\s",name))
# 结果
['宝', '元', '-', 'm', 'e', 'e', 't', '_', '1', '2', '3']

\d 匹配数字

import re
name = "宝元-meet_123 "
print(re.findall("\d",name))
# 结果
['1', '2', '3']

\D 匹配非数字

import re
name = "宝元-meet_123 "
print(re.findall("\D",name))
# 结果
['宝', '元', '-', 'm', 'e', 'e', 't', '_', ' ']

**\A 与 ^ **从字符串开头匹配

import re
name = "宝元-meet_123 "
print(re.findall("\A宝元",name))
# 结果
['宝元']

import re
name = "宝元-meet_123 "
print(re.findall("\A宝元",name))
# 结果
['宝元']

\Z 与 \z 与 $ 字符串结尾匹配

import re
name = "宝元-meet_123 "
print(re.findall("123 \Z",name))
# 结果
['123 ']

import re
name = "宝元-meet_123 "
print(re.findall("123 \Z",name))
# 结果
['123 ']

import re
name = "宝元-meet_123 "
print(re.findall("123 $",name))
# 结果
['123 ']

\n 与 \t 匹配换行符合制表符

import re
name = "宝元-meet_123\t \n"
print(re.findall("\n",name))
# 结果
['\n']

import re
name = "宝元-meet_123\t \n"
print(re.findall("\t",name))
# 结果
['\t']

------------------------------------------------匹配方式----------------------------------------------------

. 匹配任意字符(换行符除外)

import re
name = "宝元-meet_123\t \n"
print(re.findall(".",name))
# 结果
['宝', '元', '-', 'm', 'e', 'e', 't', '_', '1', '2', '3', '\t', ' ']

. 匹配任意字符

import re
name = "宝元-meet_123\t \n"
print(re.findall(".",name,re.DOTALL))
# 结果
['宝', '元', '-', 'm', 'e', 'e', 't', '_', '1', '2', '3', '\t', '\n']

? 匹配?前元素0个或1个

import re
name = "m-e-me-meet-meet_123\t \n"
print(re.findall("me?",name))
# 结果
['m', 'me', 'me', 'me']

***** 匹配 * 前面元素0个或多个 [贪婪匹配]

import re
name = "m-e-me-meet-meet_123\t \n"
print(re.findall("*",name))
# 结果
['m', 'me', 'mee', 'mee']

+ 匹配 +前面元素1个或多个 [贪婪匹配]

import re
name = "m-e-me-meet-meet_123\t \n"
print(re.findall("me+",name))
# 结果
['me', 'mee', 'mee']

{n,m} 匹配n到m个元素

import re
name = "m-e-me-meet-meet_123\t \n"
print(re.findall("e{1,2}",name))
# 结果
['e', 'e', 'ee', 'ee']

.* 任意内容0个或多个

import re
name = "m-e-me-meet-meet_123\t \n"
print(re.findall(".*",name))
# 结果
['m-e-me-meet-meet_123', '']

.*? 任意内容0个或1个

import re
name = "m-e-me-meet-meet_123"
print(re.findall("m.*?e",name))
# 结果
['m-e', 'me', 'mee', 'mee']

import re
name = "m-e-me-meet-meet_123"
print(re.findall("m.?e",name))
# 结果
['m-e', 'me', 'mee', 'mee']

[] 获取括号中的内容

import re
name = "m-e-me-meet-meet_123"
print(re.findall("[1-9]",name))
# 结果
['1', '2', '3']
# []中的-是什么至什么不会匹配-

import re
name = "m-e-me-meet-meet_123"
print(re.findall("[a-z]",name))
# 结果
['m', 'e', 'm', 'e', 'm', 'e', 'e', 't', 'm', 'e', 'e', 't']

import re
name = "m-e-me-meet-meet_123"
print(re.findall("[A-z]",name))
# 结果
['m', 'e', 'm', 'e', 'm', 'e', 'e', 't', 'm', 'e', 'e', 't', '_']
# 是按照ascii码表位进行匹配的

import re
name = "m-e-me-meet-meet_123"
print(re.findall("[a-zA-Z]",name))
# 结果
['m', 'e', 'm', 'e', 'm', 'e', 'e', 't', 'm', 'e', 'e', 't']

import re
name = "m-e-me-meet-meet_123"
print(re.findall("[^A-z]",name))
# 结果
['-', '-', '-', '-', '1', '2', '3']
# [^A-z] 有上尖号就是取反,获取不是字母和特定的几个字符

如果想要匹配到-,就需要进行如下操作(-号放到最前面)
import re
name = "m-e-me-meet-meet_123"
print(re.findall("[-+*/]",name))
# 结果
['-', '-', '-', '-']

练习

有如下字符串:‘alex_sb ale123_sb wu12sir_sb wusir_sb ritian_sb’ 的 alex wusir ’

找到所有带_sb的内容

() 分组 定制一个匹配规则

import re
print(re.findall('(.*?)_sb', 'alex_sb wusir_sb 日天_sb'))
# 结果
['alex', ' wusir', ' 日天']

# 应用举例:
print(re.findall('href="(.*?)"','点击')
# 结果
['http://www.baidu.com']

**| ** 匹配 左边或者右边

import re
print(re.findall('alex|宝元|wusir', 'alex宝元wusiraleeeex宝宝元odlb'))
# 结果
['alex', '宝元', 'wusir', '宝元']

import re
print(re.findall('compan(day|morrow)','Work harder today than yesterday, and the day after tomorrow will be better'))
# 结果
['day', 'morrow']

import re
print(re.findall('compan(?:day|morrow)','Work harder today than yesterday, and the day after tomorrow will be better'))
# 结果
['today', 'tomorrow']
# 分组() 中加入?: 表示将整体匹配出来而不只是()里面的内容。

------------------------------------------------常用方法----------------------------------------------------

findall 全部找到返回一个列表

import re
print(re.findall("alex","alexdsb,alex_sb,alexnb,al_ex"))
# 结果
['alex', 'alex', 'alex']

search 从字符串中任意位置进行匹配查找到一个就停止了,返回的是一个对象. 获取匹配的内容必须使用.group()进行获取

import re
print(re.search("sb|nb","alexdsb,alex_sb,alexnb,al_ex").group())
# 结果
sb

match 从字符串开始位置进行匹配

import re
print(re.match('meet', 'meet alex wusir 日天').group())
# 结果
meet

import re
print(re.match('alex', 'meet alex wusir 日天'))
# 结果
None 

split 分隔 可按照任意分隔符进行分隔

import re
print(re.split('[ ::,;;,]','alex wusir,日天,太白;女神;肖锋:吴超'))
# 结果
['alex', 'wusir', '日天', '太白', '女神', '肖锋', '吴超']

sub 替换

import re
print(re.sub('barry', 'meet', 'barry是最好的讲师,barry就是一个普通老师,请不要将barry当男神对待。'))
# 结果
meet是最好的讲师,meet就是一个普通老师,请不要将meet当男神对待。

compile 定义匹配规则

import re
obj = re.compile('\d{2}')
print(obj.findall("alex12345"))
# 结果
['12', '34']

import re
['12', '34']
obj = re.compile('\d{2}')
print(obj.search("alex12345").group())
# 结果
12

finditer 返回一个迭代器

import re
g = re.finditer('al',"alex_alsb,al22,aladf")
print(next(g).group())
print([i.group() for i in g])
# 结果
al
['al','al','al']

给分组起名字

import re
ret = re.search("<(?P\w+)>\w+","

hello

"
) print(ret.group("tag_name")) print(ret.group()) # 结果 h1 <h1>hello</h1> import re ret = re.search(r"<(\w+)>\w+","

hello

"
) print(ret.group(1)) print(ret.group())

相关练习:

1 "1-2*(60+(-40.35/5)-(-4*3))"
1.1 匹配所有的整数
print(re.findall('\d+',"1-2*(60+(-40.35/5)-(-4*3))"))
1.2 匹配所有的数字(包含小数)
print(re.findall(r'\d+\.?\d*|\d*\.?\d+', "1-2*(60+(-40.35/5)-(-4*3))"))
1.3 匹配所有的数字(包含小数包含负号)
print(re.findall(r'-?\d+\.?\d*|\d*\.?\d+', "1-2*(60+(-40.35/5)-(-4*3))"))

2,匹配一段你文本中的每行的邮箱
http://blog.csdn.net/make164492212/article/details/51656638 匹配所有邮箱

3,匹配一段你文本中的每行的时间字符串 这样的形式:'1995-04-27'

s1 = ''' 时间就是1995-04-27,2005-04-27 1999-04-27 老男孩教育创始人 老男孩老师 alex 1980-04-27:1980-04-27 2018-12-08 '''
print(re.findall('\d{4}-\d{2}-\d{2}', s1))

4 匹配 一个浮点数
print(re.findall('\d+\.\d*','1.17'))

5 匹配qq号:腾讯从10000开始:
print(re.findall('[1-9][0-9]{4,}', '2413545136'))

s1 = ''' 

python基础篇

   python 基础知识

   python 初始python

   python 字符编码

   python 类型及变量

   python 字符串详解

   python 列表详解

   python 数字元祖

   python 字典详解

   python 集合详解

   python 数据类型 

   python文件操作

   python 闭包

   python 函数详解

   python 函数、装饰器、内置函数

   python 迭代器 生成器  

   python匿名函数、内置函数

'''
1,找到所有的span标签的内容 ret = re.findall('', s1) print(ret) 2,找到所有a标签对应的url print(re.findall('',s1))
锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章