当前位置:   article > 正文

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

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() #匹配结束位置
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

举例

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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

四、re模块常用方法

1)re.compile()

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

参数说明:
pattern:正则表达式对象。
flags:代表功能标志位,扩展正则表达式的匹配。
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

2) re.findall()

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

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

3) regex.findall()

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

参数说明:
string 目标字符串。
pos 截取目标字符串的开始匹配位置。
endpos 截取目标字符串的结束匹配位置。
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

4) re.split()

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

参数说明:
pattern:正则表达式。
string:目标字符串。
flags:功能标志位,扩展正则表达式的匹配。
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

5) re.sub

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

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

6) re.search()

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

参数说明:
pattern:正则表达式
string:目标字符串
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

使用注意:
在平时的使用中,我们一般不使用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)))#正则表达式
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

七、贪婪和非贪婪模式

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

八、通用匹配正则表达式

.*? 配合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
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

在这里插入图片描述

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

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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

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', '')
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/172318
推荐阅读
相关标签
  

闽ICP备14008679号