python正则表达式库及re学习01

正则表达式,是一种语法,用来描述你想搜索的字符串的特征。

元字符(metacharacters)

它们出现在正则表达式字符串中,不是表示直接匹配他们, 而是表达一些特别的含义。

re.compile 函数返回的是 正则表达式对象,它对应的匹配规则在参数中进行定义

  • .:表示要匹配除了 换行符 之外的任何 单个 字符。

    python 复制代码
    import re
    
    content = """ 
    蓝色的天空
    白色的云彩
    红色的太阳
    """
    p = re.compile('.色的')
    for v in p.findall(content):
        print(v)
    
    # 蓝色的
    # 白色的
    # 红色的
  • *:表示匹配前面的子表达式任意次,包括0次

    python 复制代码
    import re
    
    content = """ 
    苹果,是绿色的
    橙子,是橙色的
    香蕉,是黄色的
    乌鸦,是黑色的
    猴子,
    """
    # 匹配逗号后面的所有内容(包含逗号)
    p = re.compile(',.*')
    for v in p.findall(content):
        print(v)
    
    # ,是绿色的
    # ,是橙色的
    # ,是黄色的
    # ,是黑色的
    # ,

    .* 在正则表达式中非常常见,表示匹配任意字符任意次数。

  • +:表示匹配前面的子表达式 一次或多次,不包括0次

    python 复制代码
    import re
    
    content = """ 
    苹果,是绿色的
    橙子,是橙色的
    香蕉,是黄色的
    乌鸦,是黑色的
    猴子,
    """
    # 
    p = re.compile(',.+')
    for v in p.findall(content):
        print(v)
    
    # ,是绿色的
    # ,是橙色的
    # ,是黄色的
    # ,是黑色的
  • ?:表示匹配前面的子表达式0次或1次

    python 复制代码
    import re
    
    content = """ 
    苹果,是绿色的
    橙子,是橙色的
    香蕉,是黄色的
    乌鸦,是黑色的
    猴子,
    """
    # 
    p = re.compile(',.?')
    for v in p.findall(content):
        print(v)
    
    # ,是
    # ,是
    # ,是
    # ,是
    # ,
  • {}: 前面的字符匹配指定的次数

    匹配完成text[st:ed]部分,将从 e d ed ed后面开始,不会有重叠**。

    python 复制代码
    import re
    
    content = """ 
    红彤彤,绿油油,黑乎乎,绿油油油油
    """
    # 
    p = re.compile('油{3,4}')
    for v in p.findall(content):
        print(v)
    
    # 油油油油
    
    p = re.compile('油{2}')
    for v in p.findall(content):
        print(v)
    
    # 油油
    # 油油
    # 油油

贪婪模式和非贪婪模式

*+?都是贪婪模式,使用他们时,会尽可能多的匹配内容。

python 复制代码
import re

content = """ 
<html><head><title>Title</title>
"""
# 
p = re.compile('<.*>')
for v in p.findall(content):
    print(v)
# <html><head><title>Title</title>
python 复制代码
import re

content = """ 
<html><head><title>Title</title>
"""
# 
p = re.compile('<.*?>')
for v in p.findall(content):
    print(v)

# <html>
# <head>
# <title>
# </title>
  • \:在正则表达式中有多种用途。

    • 可以对元字符进行转义:
    python 复制代码
    import re
    
    content = """ 
    苹果.是绿色的
    橙子.是橙色的
    香蕉.是黄色的
    """
    # 
    p = re.compile('.*\.')
    for v in p.findall(content):
        print(v)
    
    # 苹果.
    # 橙子.
    # 香蕉.
    • 匹配某种字符类型

      反斜杠后面接一些字符,表示匹配 某种类型 的一个字符。

      \what 含义
      \d 匹配0-9之间任意一个数字字符
      \D 匹配一个非0-9的任意字符
      \s 匹配一个空白字符,包含 空格、tab、换行符
      \S 匹配一个非空白字符
      \w 匹配任意一个文字字符,包括大小写字母、数字、下划线
      \W 匹配任意一个非文字字符

      小写是匹配,大写是不匹配。

  • []:匹配几个字符之一

    [abc]表示匹配a,b,c中的一个。

    [a-c]表示匹配ac中的一个。

    匹配所有的小写字符:[a-z]

    [^\d]表示选择非数字字符

  • ^:表示匹配文本的 开头 位置。

    正则表达式可以设定 单行模式多行模式

    • 如果是 单行模式 ,表示匹配 整个文本 的开头位置。

    • 如果是 多行模式 ,表示匹配 文本每行 的开头位置。

    python 复制代码
    import re
    
    content = """001-苹果价格-60
    002-橙子价格-70
    003-香蕉价格-80
    """
    # 单行模式
    p = re.compile('^\d+')
    for v in p.findall(content):
        print(v)
    
    # 001
    
    # 多行模式
    p = re.compile('^\d+', re.M)
    for v in p.findall(content):
        print(v)
    # 001
    # 002
    # 003
  • $:表示匹配文本的 结尾 位置。

    如果是 单行模式 ,表示匹配 整个文本 的结尾位置。

    如果是 多行模式 ,表示匹配 文本每行 的结尾位置。

    python 复制代码
    import re
    
    content = """
    001-苹果价格-60
    002-橙子价格-70
    003-香蕉价格-80
    """
    # 单行模式
    p = re.compile('\d+$')
    for v in p.findall(content):
        print(v)
    
    # 80
    
    # 多行模式
    p = re.compile('\d+$', re.M)
    for v in p.findall(content):
        print(v)
    # 60
    # 70
    # 80
  • |:匹配其中之一。

    python 复制代码
    import re
    
    content = """
    001-苹果价格-60
    002-橙子价格-70
    003-香蕉价格-80
    """
    
    p = re.compile('-.[果|子|蕉]')
    for v in p.findall(content):
        print(v)
    # -苹果
    # -橙子
    # -香蕉

正则表达式 - 白月黑羽 (byhy.net)

regex101: build, test, and debug regex

相关推荐
2401_865439637 分钟前
CSS怎么在flex布局中实现项目均分间距_设置justify-content space-evenly
jvm·数据库·python
m0_493934537 分钟前
CSS如何实现输入框禁用样式_使用-disabled伪类设定
jvm·数据库·python
for_ever_love__8 分钟前
UI 学习 Appearance 外观管理
学习·ui·ios·objective-c
m0_7164300715 分钟前
如何用 classList.toggle 实现侧边栏菜单的点击展开与收起
jvm·数据库·python
Destiny_where19 分钟前
Langgraph基础(4)-中断interrupt.实现图执行的动态暂停与外部交互
人工智能·python·langchain·langgraph
好家伙VCC24 分钟前
# 发散创新:用 Rust实现高性能物理引擎的底层架构设计与实战在游戏开发、虚拟仿真和机器人控
java·开发语言·python·rust·机器人
m0_6146190627 分钟前
花了一下午学 Git,整理了一份学习笔记
笔记·git·学习
知识分享小能手27 分钟前
ECharts入门学习教程,从入门到精通,ECharts 数据可视化入门介绍(1)
学习·信息可视化·echarts
石榴树下的七彩鱼34 分钟前
图片去水印 API 哪个好?5种方案实测对比(附避坑指南 + 免费在线体验)
图像处理·人工智能·后端·python·api接口·图片去水印·电商自动化
liliangcsdn35 分钟前
多轮对话长上下文-向量检索和混合召回示例
开发语言·数据库·人工智能·python