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

相关推荐
Komorebi.py1 分钟前
【Linux】-学习笔记04
linux·笔记·学习
drebander12 分钟前
使用 Java Stream 优雅实现List 转化为Map<key,Map<key,value>>
java·python·list
威威猫的栗子35 分钟前
Python Turtle召唤童年:喜羊羊与灰太狼之懒羊羊绘画
开发语言·python
weiabc1 小时前
学习electron
javascript·学习·electron
墨染风华不染尘1 小时前
python之开发笔记
开发语言·笔记·python
Dxy12393102161 小时前
python bmp图片转jpg
python
麦麦大数据1 小时前
Python棉花病虫害图谱系统CNN识别+AI问答知识neo4j vue+flask深度学习神经网络可视化
人工智能·python·深度学习
LKID体1 小时前
Python操作neo4j库py2neo使用之创建和查询(二)
数据库·python·neo4j
HackKong2 小时前
小白怎样入门网络安全?
网络·学习·安全·web安全·网络安全·黑客
LKID体2 小时前
Python操作neo4j库py2neo使用之py2neo 删除及事务相关操作(三)
开发语言·python·neo4j