Python模块:re模块(正则表达式)

在这里插入图片描述

一、什么是正则表达式

正则表达式,又称规则表达式。(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。​

正则表达式的​特点:

  1. 灵活性、逻辑性和功能性非常强;
  2. 可以迅速地用极简单的方式达到字符串的复杂控制。
  3. 对于刚接触的人来说,比较晦涩难懂。

二、正则表达式的匹配

(1)单个字符匹配
在这里插入图片描述

  • 有些特殊字符在[ ]中被赋予新的特殊含义,如^出现在[]中的开始位置表示取反,它出现在[]中的其他位置表示其一个普通字符
  • 有的普通字符变为特殊字符,如 -[ ]中的位置不是第一个字符则表示一个数字或字母区间,如果在[ ]中的位置是第一个字符则表示其本身(一个普通字符)
  • [ ]中,如果要使用-, ^],可在在它们前面加上反斜杠,例如[\^]

(2)匹配边界
在这里插入图片描述
(3)重复次数
| ?    | 0或1,要么出现,要么不出现 |
| ----- | -------------------------- |
| *     | 0-多次                     |
| +     | 1-多次,至少一次           |
| {n,}  | 大于等于n次                |
| {n,m} | 大于等于n次小于等于m次     |
| {n}   | 重复n次                    |

说明: {m,n}中的m和n可以省略其中一个,{,n}相当于{0,n},{m,}相当于{m,整数最大值}。

(4)预定义字符集

在这里插入图片描述
(5)逻辑分组
在这里插入图片描述

三、python中re模块的使用

# 模块
import re   


# 方法
match.group() #返回匹配对象
match.group(0)#获取匹配结果,结果同上
match.span() #获取匹配范围
match.start() #匹配开始位置
match.end() #匹配结束位置

举例

import re

# 1.将正则表达式编译成一个pattern对象
pattern = re.compile('\d+')

# 2.匹配字符串
str = '12hello 456,a;b'
m1 = pattern.match(str)

# 3.获取
print(m1)  # <_sre.SRE_Match object; span=(0, 2), match='12'>
print(m1.group())  # 12
print(m1.span())  # (0, 2)
print(m1.start())  # 0
print(m1.end())  # 2

四、re模块常用方法

1)re.compile()

该方法用来生成正则表达式对象,其语法格式如下:
regex=re.compile(pattern,flags=0)

参数说明:
pattern:正则表达式对象。
flags:代表功能标志位,扩展正则表达式的匹配。

2) re.findall()

根据正则表达式匹配目标字符串内容。
re.findall(pattern,string,flags=0)

该函数的返回值是匹配到的内容列表,如果正则表达式有子组,则只能获取到子组对应的内容。
参数说明如下:
pattern:正则表达式对象。
string:目标字符串
flags:代表功能标志位,扩展正则表达式的匹配。

3) regex.findall()

该函数根据正则表达式对象匹配目标字符串内容。其语法格式如下:
regex.findall(string,pos,endpos)

参数说明:
string 目标字符串。
pos 截取目标字符串的开始匹配位置。
endpos 截取目标字符串的结束匹配位置。

4) re.split()

该函数使用正则表达式匹配内容,切割目标字符串。返回值是切割后的内容列表。参数说明:
re.split(pattern,string,flags = 0)

参数说明:
pattern:正则表达式。
string:目标字符串。
flags:功能标志位,扩展正则表达式的匹配。

5) re.sub

该函数使用一个字符串替换正则表达式匹配到的内容。返回值是替换后的字符串。其语法格式如下:
re.sub(pattern,replace,string,max,flags = 0)

其参数说明:
pattern:正则表达式。
replace:替换的字符串。
string:目标字符串。
max:最多替换几处,默认替换全部
flags:功能标志位,扩展正则表达式的匹配。

6) re.search()

匹配目标字符串第一个符合的内容,返回值为匹配的对象。语法格式如下:
re.search(pattern,string,flags=0)

参数说明:
pattern:正则表达式
string:目标字符串

使用注意:
在平时的使用中,我们一般不使用re.compile方法,因为在源码中已经自动调用该方法
在这里插入图片描述
而其他的函数例如findall,search这些方法也都是自动调用该方法的
在这里插入图片描述

五、flags功能标志位

功能标志位的作用是扩展正则表达的匹配功能。常用的 flag 如下所示:

缩写元字符说明
A元字符只能匹配 ASCII码。
I使匹配对大小写不敏感
S使 . 匹配包括换行在内的所有字符
M多行匹配,影响 ^ 和 $

注意:可以同时使用福多个功能标志位,比如 flags=re.I|re.S

六、正则表达式中的分组

分组时通过()来表示的,一个括号就表示一个分组。

分组的作用

1)筛选特定内容。
取分组内容可以通过match对象的group方法来去。
group(1)表示取正则表达式中第一个括号的内容,依次类推。

import re
content = '{name:"zhangsan",age:"10",hobby["basktball","football","read"]}'
pattern = re.compile(r'{name:"(\w+)",age:"(\d+)".+')
match = pattern.search(content)
print(match.group(1))#zhangsan
print(match.group(2))#10


--------------------------------------------------------------------2)可以在同一个表达式的后面引用前面的分组表达式。

s = "<html><h1>正则表达式</h1></html>"

import re

s = "<html><h1>正则表达式</h1></html>"
pattern = re.compile(r'<(html)><(h1)>(.*)</\2></\1>')
match = pattern.search(s)
print(match.group(3)))#正则表达式

七、贪婪和非贪婪模式

  • 贪婪是用*控制的
  • 非贪婪是用?来控制
  • *?都是作用表示重复次数的元字符的。
  • 正则默认是贪婪模式,所以数量控制符默认是取最大值,也是贪婪。
  • 在表示重复的元字符后面加一个?,此时就是非贪婪,取这个重复元字符的最小值。

八、通用匹配正则表达式

.*? 配合re.S,即:匹配包括换行在内的所有字符

import re

content = '{name:"zhangsan",age:"10",hobby:["basktball","football","read"]}'
pattern = re.compile(r'.*?"(.*?)".*?"(.*?)".*?',re.S)
match = pattern.search(content)
print(match)
print(match.group(1))
print(match.group(2))

在这里插入图片描述

九、使用正则的一些处理实例

1.去掉英文符号

import string


def remove_english_punctuation(text):
    """去除所有英文符号"""
    punctuation_string = string.punctuation
    # print("所有的英文标点符号:", punctuation_string)
    for i in punctuation_string:
        text = text.replace(i, '')
    return text

2.去掉中文符号

from zhon.hanzi import punctuation


def remove_chinese_punctuation(text):
    punctuation_str = punctuation
    # print("中文标点符合:", punctuation_str)
    for i in punctuation_str:
        text = text.replace(i, '')
    return text

3.去掉h5标签

def data_cleaning(content):
    """
    内容数据清洗,去除文字中的H5代码
    """
    Cstr = content
    result = re.findall(r'<.*?>', Cstr)
    for r in result:
        Cstr = Cstr.replace(r, '')
    return Cstr.replace('\n', '').replace('\t', '').replace('\r', '')
  • 5
    点赞
  • 53
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,您想了解Python正则表达式re模块。re模块Python的标准库之一,用于处理正则表达式正则表达式是一种用于匹配和搜索文本的模式,它可以用来检查字符串是否符合特定的格式,或者从字符串中提取想要的信息。 re模块提供了一系列函数和方法来操作正则表达式,包括: - re.compile(pattern, flags):编译正则表达式,返回一个正则表达式对象。 - re.search(pattern, string, flags):在字符串中搜索匹配正则表达式的第一个位置,返回一个匹配对象。 - re.match(pattern, string, flags):从字符串开头开始匹配正则表达式,返回一个匹配对象。 - re.findall(pattern, string, flags):返回字符串中所有匹配正则表达式的子串列表。 - re.sub(pattern, repl, string, count=0, flags=0):用指定的替换字符串替换字符串中所有匹配正则表达式的子串,返回替换后的字符串。 其中,pattern参数是正则表达式,string参数是要匹配的字符串,flags参数是可选的标志,用来控制正则表达式的行为。 例如,下面的代码展示了如何使用re模块来匹配一个简单的正则表达式: ```python import re text = 'Hello, World!' pattern = r'Hello' match = re.search(pattern, text) if match: print('Match found:', match.group()) else: print('No match') ``` 输出结果为: ``` Match found: Hello ``` 以上就是Python正则表达式re模块的基本介绍,希望能帮到您。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

张烫麻辣亮。

谢谢老板支持!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值