Python3的re模块的使用

news/2024/7/18 10:07:28
import re

# 2元字符 . ^ $ * + ? { } [ ] | ( ) \
# 作用:匹配字符串

s = 'hello world'
# 返回开始位置 下标
print(s.find('llo'))

# 找到 并替换
print(s.replace('ll', 'xx'))

# . 代指一位字符,代指所有字符 除了换行符 \n
ci = re.findall('w\w{2}l', 'hello world')
print(ci)

# ^ 只会在开始时进行匹配
ci = re.findall('^h..l', 'hello world')
print(ci)

# $ 只会在最后时进行匹配
ci = re.findall('o..d$', 'hello world')
print(ci)

# * 重复匹配 从h开始到o(最后一个)中间可以任意字符
ci = re.findall('h.*o', 'hello world')
print(ci)

# + 至少需要一个 只对前面第一个字符有作用
ci = re.findall('a+b', 'aaaaabcccdddabbbbb')
print(ci)

# ? 只能取0或1次 只对前面第一个字符有作用 出现a 0次或1次
ci = re.findall('a?b', 'abcdbb,acb,addb')
print(ci)

# {n}  出现n次 只对前面第一个字符有作用
ci = re.findall('a{2}b', 'abcdbb,acb,aabddb')
print(ci)

# +等价于 {1,正无穷} 也等价于 {1, }
# * 等价于 {0,正无穷}    ? 等价于{0,1}
# {m,n}  出现m到n次 只对前面第一个字符有作用
ci = re.findall('a{1,3}b', 'abcdbb,acb,aabddb')
print(ci)

# x[m,n]y 字符集 或的关系 xmy或 xny
ci = re.findall('a[c,d]b', 'abcdbb,acb,aabddb')
print(ci)

# [] 取消元字符的特殊功能 (三个例外:\,^,-)
ci = re.findall('[w,,,*]', 'abwdbb,,acb,aa*ddb')
print(ci)

ci = re.findall('[1-9,a-z,A-Z]', '12asAS')
print(ci)

# [^] 就变成了 取反操作
ci = re.findall('[^(a-z)]', '12aimsAS')
print(ci)

# ^ 是取[] 内的所有非
ci = re.findall('[^12,3,4]', '1234567891')
print(ci)

# \ 反斜杠
# \ 1.反斜杠后边跟元字符去除特殊功能 2.反斜杠后边跟普通字符实现特殊功能
# \w	匹配 数字 字母 下划线
# \W	匹配 非数字 非字母 非下划线
# \s	匹配 任意空白字符,等价于 [\t\n\r\f]。
# \S	匹配 任意非空字符
# \d	匹配 任意数字,等价于 [0-9]。
# \D	匹配 任意非数字
# \b	匹配一个单词边界,也就是指单词和空格间的位置。

ci = re.findall('\w', '19 az__')
print(ci)
ci = re.findall('\W', '19 az__')
print(ci)
ci = re.findall('\s', '19 az__')
print(ci)
ci = re.findall('\S', '19 az__')
print(ci)
ci = re.findall('\d', '19 az__')
print(ci)
ci = re.findall('\D', '19 az__')
print(ci)
ci = re.findall(r'er\b', '19 er az__over ')
print(ci)

# 符合的第一个结果
print(re.search('as', 'hgahashjjas'))

# 想要匹配 \ 没找到 加r 表示匹配原生字符 不进行转义
print(re.findall(r'\\', 'adhfD\c'))

print(re.findall(r'\\', 'adhfD\c'))

# | 是或的意思 会先取第一个匹配结果
print(re.search('(as)+', 'adsdasas').group())
print(re.search('(as)|3', 'as3').group())

# ?P<name> 固定格式 给分组起一个名字 为name 规则为:\d{3}
name = re.search('(?P<id>\d{3})', 'wwwwddash34ttt123/ooo')
print(name.group('id'))
# 连续分成两个组 分别起名 匹配规则内的 / 也是匹配规则
name = re.search('(?P<num>\d{3})/(?P<letter>\w{3})', 'wwwwddash34ttt123/abc')
print(name.group())
print(name.group('num'))
print(name.group('letter'))

# 正则表达式的方法
# 1. findall():所有结果都返回到一个列表里
# 2. search():返回一个对象(object),对象可以调用group()返回结果
# 3. match():只在字符串开始匹配,也返回匹配到的第一个对象,对象可以调用group()
# 4. split() 如果在边缘 则会有空字符
print(re.split('k', 'ashdjakah'))
print(re.split('[h,k]', 'ashdjakah'))
# 5. sub() 替换函数,使用方式参看下面
print(re.sub('j..', 's..b', 'hello joe world'))
# 6. compile() # 记为一个正则表达式 下次可以直接使用
obj = re.compile('\.com')
print(obj.findall('ahfjhj.com'))

要点:

  •  find() 返回第一个匹配位置下标
  • replace() 找到 并替换
  • 2元字符 . ^ $ * + ? { } [ ] | ( ) \
  • . 代指一个字符,除了换行符\n 以外的其他所有字符
  • ^ 只会在开始位置进行匹配
  • $ 只会在末尾位置进行匹配
  • * 可重复匹配多个字符:h.*o  可以匹配到hello
  • + 至少匹配到一个: a+b 可以匹配到 aaaab 或 ab
  • ? 只能匹配到0个或1个: a?b 可以匹配到 b 或 ab
  • {n} 匹配到n次:a{3}b 可以匹配到 aaab
  • 小结:1. + 等价 {1,正无穷};2. * 等价 {0,正无穷};3. ?等价{0,1} 
  • 字符集[ ],括号内是或的关系:a[m,n]b 可以匹配到 amb 或 anb
  • [ ]  还有取消元字符的特殊功能(三个例外:\ , ^ , -)
  • [^] 取反操作:[^(a-z)] 表示匹配除了小写字母以外的所有字符
  • \ 反斜杠:\w 匹配数字,字母下划线 。\W 匹配非数字,非字母。非下划线。\s 匹配任意空白字符 等价[\t \n \r \f]。 \S匹配任意非空字符。\d 匹配任意数字,等价[0-9]。\D 匹配非数字。 \b 匹配单词边界:er\b 可以匹配‘19 er az_over’ 中的 一个'er'。
  • \ 如果想匹配反斜杠 \ 就在前面加 r  表示不进行转义:r'\\' 可以匹配到 \ 
  • | 表示或的意思,但是如果第一个匹配,就匹配第一个,不在匹配第二个: '(as)|3' 匹配 ‘as3’ 匹配到as  而不会是3。
  • ?P<name>fmt/?P<name>fmt/?P<name>fmt ... 用/ 分隔开 ?P<name>fmt 中的name是别名,fmt 是匹配规则。可以通过group('name') 获取到匹配结果。
  • findall() 所有结果返回到一个列表
  • search() 返回一个对象,可以调用group()返回结果
  • match() 在字符串开始匹配,返回匹配的第一个对象,可以调用group()返回结果
  • split(‘w’,'awawaw')  以 w 分开awawaw。如果w在边缘,则会有空字符串 '空' 。
  • sub(‘w’,'a','awawaw')  表示以w替换a,最后字符串变成,wwwwww
  • compile() 记为一个匹配规则。my_re=compile('\.com') ,匹配'.com' 记为my_re。my_re.findall('www.baidu.com') 返回.com

 


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

相关文章

如何在Linux下环境下快速切换工作目录

为什么80%的码农都做不了架构师&#xff1f;>>> 在Linux命令行下&#xff0c;我们经常需要在一个目录下执行某些操作在跳转到另外的目录下&#xff0c;也就是使用我们熟悉的cd命令&#xff0c;基本上接触过命令行的人&#xff0c;第一个认识的命令都是cd&#xff0…

JS 节点 正则表达式

1. 节点操作 基本概念 复制标签,会使用克隆方法 写入标签时,会使用节点操作方法 什么是节点? 整个的HTML文件,其中的所有内容,都视为HTML文件的一个节点对象 可以通过操作这些节点对象,来操作HTML文件 DOM节点:DOM 就是我们 html 结构中一个一个的节点构成的 不光我们的标签…

Python3的random模块的使用

import randomprint(random.random()) # 默认限制在0-1的小数print(random.randint(1, 8)) # 1-8的整数 包含1和8print(random.choice(joe smith)) # 随机选择一个字符print(random.choice([joe, smith])) # 元组中随机选择print(random.randrange(1, 3)) # 1-3的整数&…

探索不同算法实现在MATLAB中解决LASSO问题:投影梯度法、次梯度方法和平滑梯度方法的详细分析与比较

引言 在机器学习和数据科学的世界中&#xff0c;LASSO&#xff08;Least Absolute Shrinkage and Selection Operator&#xff09;问题是一个经常出现的主题。LASSO 是一种线性模型选择和正则化方法&#xff0c;可以增强预测精度和可解释性。我们将用几种不同的方法来解决这个…

OSChina 周四乱弹 ——老司机的幼年日常

2019独角兽企业重金招聘Python工程师标准>>> _ye : 一个人光着身子在出租屋&#xff0c;听着《那些年》&#xff0c;写着程序&#xff0c;吹着风扇&#xff0c;一个字爽。 我给你们也放这首歌&#xff0c; 你们不用光着身子听。 那些年 - 钟明秋 手机党少年们想听歌…

Python3的sys模块的使用

import sys# 1.argv print(sys.argv[0]) # 这其实就是一个list&#xff0c;下标为0元素是程序自身的绝对路径。 sys.argv.append(hello) sys.argv.append(world) # 向列表添加了两个元素 print(sys.argv[2]) # 打印下标为2的元素# 2.modules print(sys.modules[__name__]) …

ES6语法新增的变量的定义

ES6语法 ES6版本的JavaScript语法,是一个非常重要的版本 对于JavaScript的功能上有一个极大的丰富 让JavaScript从弱类型语言,提升到了 半强类型语言 ES6语法新增的变量的定义 let const 关键词定义变量 let 定义变量 特点: let 定义的变量,不会进行预解析 let 定义的变量,…

EXISTS语句

通常在我写EXISTS语句时,我会写成IF EXISTS(SELECT TOP(1) 1 FROM XXX),也没细细考究过为什么要这么写,只是隐约认为这样写没有啥问题,那今天就深究下吧&#xff01; 首先准备测试测试数据 USE [TestDB1] GO CREATE TABLE TB1001 ( ID INT IDENTITY(1,1), C1 VARCHAR(200), CON…