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

相关推荐
青 春 记 忆2 小时前
零基础入门Python11|Git实战:为任务管理器建立版本历史
开发语言·git·vscode·python·python3.11
Python私教2 小时前
多个项目怎么安全合并?先适配,再切换
后端·python·架构
Shaoxi Zhang3 小时前
JAVA学习笔记035——对象和JSON格式
java·笔记·学习
陈皮波比茶3 小时前
Redis学习
数据库·redis·学习
北斗落凡尘4 小时前
LangGraph 入门实战(12)--使用MCP
后端·python·langchain
jdksjw4 小时前
同步与异步、阻塞与非阻塞、多线程、协程超详细讲解(Python并发编程从入门到精通)
开发语言·python
Mike_Zhang5 小时前
使用python统计FreeSWITCH呼叫并发
python·freeswitch
SL-staff5 小时前
技术实践:HR如何用JVS-Logic可视化编排实现考勤数据同步(含节点配置与异常处理)
开发语言·python·低代码·钉钉·可视化编排·jvs-logic·hr技术
minglie16 小时前
espidf的esp32版的webClient
学习
学运维的Kysan6 小时前
暑假运维学习打卡第二十五天8.16
学习