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

相关推荐
siy233310 分钟前
[c语言日记] 数组的一种死法和两种用法
c语言·开发语言·笔记·学习·链表
困鲲鲲19 分钟前
Flask 核心基础:从 路由装饰器 到 __name__ 变量 的底层逻辑解析
python·flask
njxiejing28 分钟前
Python NumPy安装、导入与入门
开发语言·python·numpy
Rhys..1 小时前
Python&Flask 使用 DBUtils 创建通用连接池
开发语言·python·mysql
Just_Paranoid1 小时前
【Python Tkinter】图形用户界面(GUI)开发及打包EXE指南
python·gui·tkinter·pyinstaller
小宁爱Python1 小时前
Django 基础入门:命令、结构与核心配置全解析
后端·python·django
在路上`2 小时前
前端学习之后端java小白(三)-sql外键约束一对多
java·前端·学习
闲人编程2 小时前
Flask 前后端分离架构实现支付宝电脑网站支付功能
python·架构·flask·支付宝·前后端·网站支付·apl
996终结者2 小时前
同类软件对比(四):Jupyter vs PyCharm vs VS Code:Python开发工具终极选择指南
vscode·python·jupyter·pycharm·visual studio code
果壳~2 小时前
【Python】爬虫html提取内容基础,bs4
爬虫·python·html