侧边栏壁纸
  • 累计撰写 17 篇文章
  • 累计创建 10 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

正则表达式

十点差三分
2024-11-03 / 0 评论 / 0 点赞 / 10 阅读 / 0 字

简介:关于正则表达式的应用

基本元字符

字符

说明

\

转义字符

.

表示任意一个字符

+

表示重复一次或者多次

*

表示重复零次或者多次

表示重复零次或者一次

|

选择符号,或的关系

{}

定义量词

[]

定义字符组

()

定义分组

^

表示取反,或匹配一行的开始

$

匹配一行的结束

预定义字符类

字符

说明

\\

匹配反斜杠 \ 字符

\n

匹配换行

\r

匹配回车

\f

匹配换页符

\t

匹配一个水平制表符

\v

匹配垂直制表符

\s

匹配一个空格

\S

匹配一个非空格符

\d

匹配一个数字字符,等价于[0-9]

\D

匹配一个非数字字符,等价于[^0-9]

\w

匹配任何语言的单词字符、数字和下划线等字符,如果正则的编译标志设置为ASCII,则只匹配[a-zA-Z0-9_]

量词

字符

说明

{n}

出现n次

{n,m}

至少出现n次但不超过m次

{n,}

至少出现了n次

贪婪量词和懒惰量词

贪婪量词:尽可能多的匹配字符(r'\d{5,8}',匹配的数字出现8个)

懒惰量词:尽可能少的匹配字符(r'\d{5,8}?',匹配的数字出现5个)

re中的重要函数

search()函数

规则:在输入的字符串中查找,返回第一个匹配的内容,

找到返回match对象

否则返回None

mathch函数

规则:在输入字符串开始处中查找匹配内容,

找到返回match对象

否则返回None

search()函数和mathch函数的对比
import re
rule = r'\w+@qq\.com'
text = 'My email is 3011077997@qq.com.'

#search
res = re.search(rule,text)

#match
res1 = re.match(rule,text)

#打印结果
print(res)
print(res1)
# <re.Match object; span=(12, 29), match='3011077997@qq.com'>
# None

# 如果将text改为3011077997@qq.com.
# 则都能匹配到
# 结果为
# <re.Match object; span=(0, 17), match='3011077997@qq.com'>
# <re.Match object; span=(0, 17), match='3011077997@qq.com'>
findall()函数

规则:在输入字符串中查找所有匹配内容,

成功,返回match列表对象

否则返回None

规则:在输入字符串中查找所有匹配内容,

成功,返回容纳match的可迭代对象,通过迭代对象每次可以返回一个match对象

否则返回None

findall()函数和finditer()函数
import re
rule = r'[Pp]ython'
text = 'This is a python or Python'
my_list = re.findall(rule,text)
my_list1 = re.finditer(rule,text)
print(my_list)
print(my_list1)
# ['python', 'Python'] 
# <callable_iterator object at 0x000002FAE8317A60> 得到的是一个对象

for m in my_list1:
    print(m)
# <re.Match object; span=(10, 16), match='python'>
# <re.Match object; span=(20, 26), match='Python'>
字符串分割函数--split()

说明:按照匹配的子字符串进行字符串分割,返回字符串列表对象

用法:re.split(pattern,string,maxsplit =0, flags=0)

pattern: 正则表达式

string: 分割的字符串

maxsplit: 最大的分割次数,默认值为零:表示分割次数没有限制

flags: 编译标志

import re

rule = r'\d+'
text = 'AB12CD1234EF32G'
res = re.split(rule,text)
res1 = re.split(rule,text,maxsplit=2)
print(res)
print(res1)
# ['AB', 'CD', 'EF', 'G']
# ['AB', 'CD', 'EF32G']
字符串替换函数--sub()

说明:用于替换匹配的子字符串,返回值是替换后的字符串。

用法:re.sub(pattern , repl , string ,count =0 , flags=0)

pattern: 正则表达式

repl: 替换的字符串

string: 分割的字符串

count: 替换的最大数量,默认值为零:表示替换数量没有限制

flags: 编译标志

import re

rule = r'\d+'
text = 'AB12CD1234EF32G'
res = re.sub(rule,'',text)
res1 = re.sub(rule,'',text,count=1)
print(res)
print(res1)
# ABCDEFG
# ABCD1234EF32G

0

评论区