0基础学python-18:掌管匹配机制的模块——re

目录

前言

使用正则表达式的背景:

 元字符

 匹配的范围

 正则表达式

1.import re

2.re.match(r"匹配的规则",所要匹配的字符串) 

3.匹配一个变量名

 4.转义字符的匹配

5.分组匹配

6.贪婪匹配

7.预编译


前言

        正则表达式(Regular Expression,简称 regex 或 regexp)是一种用来描述字符串匹配模式的强大工具。它提供了一种灵活的方式来搜索、匹配和替换文本中的字符串。正则表达式由普通字符(如字母、数字)和特殊字符(元字符)组成,这些特殊字符用来定义模式的规则。

 

使用正则表达式的背景:

strs = "jshdfkjshd\sdf/gasg.sd<<asd,1123-"

        之前学过的字符串处理方法里分割字符是使用split.()。按照括号里的字符分割字符串。但对于上述strs字符串,字符很多,或者字符串很长很杂。这时想要取出自己想要的内容,就要使用正则表达式来提取。

 

 元字符

        正则表达式用来匹配要取数据类型的字符

 

 匹配的范围

用*表示任意个字符(包括0个),
用+表示至少一个字符,
用?表示0个或1个字符,
用{n}表示n个字符,
用{n,m}表示n~m个字符

 

 正则表达式

1.import re

        导入re模块

 

2.re.match(r"匹配的规则",所要匹配的字符串) 

        使用re模块里的match方法进行匹配,其中r的使用是为了避免字符串里的转义字符影响匹配的规则,下面代码中的"-"是精准匹配字符串里的"-"。

# 正则表达式
import re

if __name__ == '__main__':

    phone_num = "0551-1234567899"

    print(re.match(r"\d{4}-\d{3,8}", phone_num))

 

3.匹配一个变量名

        [A-Za-z_]的含义是能够匹配大写字母A到Z,小写字母a到z和下划线_,"-"在正则表达式里表示从什么到什么。\w*的含义是匹配0至任意个字母数字或者下划线。

        [pP]的含义是,p或者P

#匹配一个变量名称
print(re.match(r"[A-Za-z_]\w*", ""))

print(re.match(r"[pP]ython","python"))

 

 4.转义字符的匹配

    print("ABC\\001")

    print(re.match(r"\w+\\\d+","ABC\\001"))

输出:\w+匹配前面的字母,\\精准匹配原字符串里的\\,\d+匹配后面的数字

ABC\001

 

5.分组匹配

        匹配时间:注意每个位数的大小范围

# 分组使用的是在正则内部使用 括号 第几个括号就是第几个组别
print(re.match(r"([0-1]\d|2[0-3]):([0-5]\d):([0-5]\d)", t).groups())
print(re.match(r"([0-1]\d|2[0-3]):([0-5]\d):([0-5]\d)", t).group(1))
print(re.match(r"([0-1]\d|2[0-3]):([0-5]\d):([0-5]\d)", t).group(2))
print(re.match(r"([0-1]\d|2[0-3]):([0-5]\d):([0-5]\d)", t).group(3))

输出:([0-1]\d|2[0-3])  这里的|也表示或者的意思 ,注意group()输出时从1开始,而不是列表和字符串里的从0开始

('19', '59', '59')
19
59
59

 

6.贪婪匹配

正则匹配默认是贪婪匹配,也就是匹配尽可能多的字符。

# 贪婪匹配
# 怎么结束贪婪匹配  ? 结束贪婪匹配
# ^表示以什么开头   $ 表示以什么结尾
num = "102333330002000"
num1 = "102333000000"
num2 = "1023333000000"
num3 = "103333000000"
num4 = "133333000000"
print(re.match(r"^(\d+?)(0+)$", num).groups())  # 以数字开头,贪婪匹配至以0结尾,且中间全是0的字段的开头结束,且匹配的字段也必须以0结尾,不然会报错

输出:^表示开头,$表示结尾。

('102333330002', '000')

 

7.预编译

类似于自定义函数

num1 = "1023330001000"
num2 = "10233330001000"
num3 = "1033330001000"
num4 = "1333330001000"

# 预编译
# 如果大家规则都类似  那可以提前将规则定义好
re_comp = re.compile(r"^(\d+?)(0+)$")
print(re_comp.match(num1).groups())
print(re_comp.match(num2).groups())
print(re_comp.match(num3).groups())
print(re_comp.match(num4).groups())

输出:

('1023330001', '000')
('10233330001', '000')
('1033330001', '000')
('1333330001', '000')

相关推荐

  1. Python--正则表达式re模块基础匹配方法

    2024-07-20 01:22:03       16 阅读
  2. Pythonre模块

    2024-07-20 01:22:03       32 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-20 01:22:03       52 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-20 01:22:03       54 阅读
  3. 在Django里面运行非项目文件

    2024-07-20 01:22:03       45 阅读
  4. Python语言-面向对象

    2024-07-20 01:22:03       55 阅读

热门阅读

  1. MySQL:入门与实践

    2024-07-20 01:22:03       18 阅读
  2. 使用Ansible实现服务器配置管理

    2024-07-20 01:22:03       18 阅读
  3. ACE之Acceptor-Connector框架

    2024-07-20 01:22:03       15 阅读
  4. Codeforces Round 959 sponsored by NEAR (Div. 1 + Div. 2) VP

    2024-07-20 01:22:03       18 阅读
  5. 197.上升的温度

    2024-07-20 01:22:03       19 阅读
  6. Openlayers特殊效果

    2024-07-20 01:22:03       15 阅读
  7. __setitem__

    2024-07-20 01:22:03       16 阅读
  8. sklearn基础教程:从入门到精通

    2024-07-20 01:22:03       16 阅读
  9. 翁恺-C语言程序设计-11-0. 平面向量加法

    2024-07-20 01:22:03       19 阅读