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

相关推荐
北鸟南游3 分钟前
学习-claude code 工程化实战的笔记-极客时间
笔记·学习·ai编程
Csvn5 分钟前
Python 开发技巧 · 生成器(Generator)进阶 —— 从 yield 到 yield from,写出省内存的生产者-消费者模式
后端·python
心中有国也有家18 分钟前
AtomGit Flutter 鸿蒙客户端:呼吸练习的三种科学模式
学习·flutter·华为·harmonyos
GEO_ai_zhijian20 分钟前
口碑好的工业GEO优秀企业
python·搜索引擎
三品吉他手会点灯21 分钟前
嵌入式机器学习 - 学习笔记1.0.2 - 学习路线导览:从机器学习基础到 TinyML应用
人工智能·笔记·嵌入式硬件·学习·机器学习
mikejahn21 分钟前
解析ISO网站单个标准的静态网址
python
Java面试题总结1 小时前
Python 开发技巧 · 高级装饰器 —— 从基础到工业级实战
开发语言·python
纸小铭2 小时前
[MAF预定义ChatClient中间件-01]LoggingChatClient——在调用LLM前后输出日志
python·中间件·flask
aiqianji2 小时前
有哪些支持长文的AI生成短篇小说软件?
人工智能·python
狗都不学爬虫_2 小时前
AI逆向 - 某定制瑞树6纯算(ck-header-params后缀)
爬虫·python·网络爬虫