当前位置: 首页 > news >正文

Python入门学习(七)高级部分:正则表达式

一、定义

正则表达式是一个特殊的字符序列,可以检测一个字符串是否与设定的字符序列相匹配。可以实现文本字符快速检索、替换等功能。

import re
a = "C|C++|Java|C#|Python|Javascript|Python"
#已有以下两种方式判断某字符串是否在指定文本中
print(a.index("Python") > -1)
print("Python" in a)#以下为正则表达式最基本的方法findall,只是参数设为常数
r = re.findall("Python", a)
if len(r) != 0:print("字符串a中包含Python")print(r)
else:print("Not exit!")

二、元字符与普通字符

普通字符即是a-z,0-9,A-Z,标点符号这些所有的非元字符。

元字符是指特定指代某些特殊含义的字符。如/d匹配一个数字字符,等价于[0-9];/D匹配一个非数字字符,等价于[^0-9];\n匹配一个换行符;\s匹配任意的不可见字符,包括空格、制表符、换页符等;\S匹配任意的课件字符;[a-z]、[A-Z]匹配指定范围内的任意字符;\b匹配一个单词边界,即指单词和空格之间的位置,如“er\b”可以匹配“never”中的“er”,但不能匹配“verb”中的"er";\B匹配一个非单词边界.....等等。

import re
a = "C0C++7Java8C+9Python6Javascript"#提取a中的数字,参数设为表示0~9的正则表达式
#\d即为元字符,表示数字
r = re.findall("\d", a)
print(r)#提取a中的非数字
r1 = re.findall("\D", a)
print(r1)

 

三、字符集

出现在字符集中的字符之间是“或”的关系,即均可匹配,如[cf],既匹配c也匹配f。

#字符集import re
s = "abc, acc, adc, aec, afc, ahc"#找出中间一个字符是c或者f的字符串/单词
#通过普通字符a\c定界
#再通过字符集设定我们的需求
r1 = re.findall("a[cf]c", s)#匹配中间字符非c非f非d的字符串/单词
r2 = re.findall("a[^cfd]c", s)#匹配中间字符为一段字符中任一字符的字符串/单词
r3 = re.findall("a[c-f]c", s)print(r1)
print(r2)
print(r3)

 

import res = "python@11 11\tjava&67\n8__php\rC++"#匹配字符串中的所有数字
r1 = re.findall("\d", s)
#也可以如下明确的字符集方式
r2 = re.findall("[\d]", s)
#也可以如下:
r3 = re.findall("[0-9]", s)
r4 = re.findall("[^\D]", s)print(r1)
print(r2)
print(r3)
print(r4)
#如要匹配字符串中所有数字和字母
#可以用\w,该元字符表示数字和字母和下划线,即只能匹配单词字符
r5 = re.findall("\w", s)
#也可以如下
r6 = re.findall("[0-9a-zA-Z_]", s)print(r5)
print(r6)#非单词字符则是用\W来匹配
r7 = re.findall("\W", s)
print(r7)
#空格、制表符、换行等称为空白字符,可用\s表示
r8 = re.findall("\s", s)
print(r8)

 四、数量词

#数量词
import rea = "python 1111java678php"r1 = re.findall("[a-zA-Z]", a)
#但这样只能匹配到单个字符
print(r1)
#如何按单词的方式去匹配呢
#可以在匹配组合后面加上数量,这就称为数量词
r2 = re.findall("[a-zA-Z]{3}", a)
print(r2)
#而且数量词可设为一个区间
r3 = re.findall("[a-zA-Z]{3,6}", a)
print(r3)

数量词的匹配模式:贪婪与不贪婪

贪婪即是指:如上代码对于[a-zA-Z]{3,6}这样的正则表达式,匹配字符串a时,因为设置的匹配数量是3到6,当匹配到"pyt"时已经满足正则表达式的要求了,这时候是输出呢还是继续匹配呢?

python中默认是继续匹配——即贪婪模式,直到匹配不到,或者已经超出设置的数量范围才输出。贪婪即要匹配更多...

如要设置为非贪婪模式,则在数量词后面加?即可:

import rea = "python 1111java678php"#默认为贪婪匹配模式
r3 = re.findall("[a-zA-Z]{3,6}", a)
print(r3)#非贪婪模式
r4 = re.findall("[a-zA-Z]{3,6}?", a)
print(r4)

其实非贪婪模式下的{3,6}?与{3}作用类似。

除了上述的方式,数量词还有用*表示匹配*前面的字符0次或者无限多次;+匹配+前面的字符1次或者无限多次;?匹配?前面的字符0次或者1次。

#数量词
import rea = "pytho0python1pythonn2"
b = "pyth111pythoner333pythonnnn555"#*匹配0次或无限多次
#具体就是对*前面一个字符"n"可以出现0次或者无限次
r1 = re.findall("python*", a)
r2 = re.findall("python*", b)
print(r1)
print(r2)#+是匹配1次或无限多次
r3 = re.findall("python+", a)
print(r3)#?是匹配0次或者1次
#此时也涉及当即可以匹配0次又可以匹配1次的时候,默认是匹配1次
r4 = re.findall("python?", a)
print(r4)#组合用法
r5 = re.findall("python{1,2}", a)
print(r5)

五、边界匹配、组、匹配模式参数

#边界匹配
import re
QQ_number = "100000001"
#验证是否为QQ号码,默认QQ号码为4~8位
#^表示从字符串第一个字符开始匹配
#$表示从字符串最后一个或几个字符也得匹配
r = re.findall("^\d{4,8}$", QQ_number)
print(r)
if r !=[]:print("是QQ号码!")
else:print("不是QQ号码!")
#
import re
a = "PythonPythonPythonPythonPython"#要求判断a中是否包含3个python
#需要成组的字符用()组合
#要注意[]里的字符是或的关系,()里的字符是且的关系,即组合。
r1 = re.findall("(Python){3}", a)
print(r1)
#匹配模式参数
import relanguage = "PythonC#\nJavaPHP"
#第三个参数即为模式参数
#设为re.I为忽略字母大小写
r = re.findall("c#", language, re.I)
print(r)
#设为re.S 为设置"."匹配所有字符(含换行符)
r1 = re.findall("C#.{1}", language, re.S)
print(r1)
#也可以组合使用,|是且的关系
r2 = re.findall("c#.{1}", language, re.I | re.S)
print(r2)

 

http://www.sczhlp.com/news/771.html

相关文章:

  • 在运维工作中,如果运行的一个容器突然挂了,如何排查?
  • SciTech-EECS-Library: img2pdf 与 pdf2image : Python 的 pdf 与 image 双向转换库
  • 在运维工作中,docker封闭了哪些资源?
  • 深度学习(pytorch量化)
  • 在运维工作中,传统虚拟化与docker有什么区别?
  • 在运维工作中,Docker怎么清理容器磁盘空间?
  • 在运维工作中,Dockerfile中常见指令有哪些?
  • 英语_阅读_Rivers are important in culture_单词_待读
  • 题解:P12151 【MX-X11-T5】「蓬莱人形 Round 1」俄罗斯方块
  • 题解:P1291 [SHOI2002] 百事世界杯之旅
  • 题解:P4170 [CQOI2007] 涂色
  • 课堂分组赛、组队赛小结
  • 【AI News | 20250725】每日AI进展
  • 题解:P13308 故障
  • 今天做什么
  • mmap提高LCD显示效率
  • 用 Python 构建可扩展的验证码识别系统
  • Java学习Day28
  • 语录
  • 深度学习(onnx量化)
  • Redisson
  • P13493 【MX-X14-T3】心电感应 题解
  • uni-app项目跑APP报useStore报错
  • DE_aemmprty 草稿纸合集
  • 22天
  • 基于 Python 的简易验证码识别系统设计与实现
  • java语法的学习笔记
  • 机械运动
  • 【2025.7.28】模拟赛T4
  • 《构建之法》读后感