正则表达式 re库的使用

这篇具有很好参考价值的文章主要介绍了正则表达式 re库的使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

常见匹配模式

模式 描述
^ 匹配 字符串的开始
\w 匹配 字母数字及下划线
\W 匹配 字母数字及下划线
\s 匹配 任意空白字符,即空格
\S 匹配 任意非空字符
\d 匹配 任意数字,等价于[0-9], \d+ 表示匹配多个数字
\D 匹配 任意数字
\A 匹配字符串开始
\Z 匹配字符串结束,如果是存在换行,只匹配到换行前的结束字符串
\z 匹配字符串结束
\G 匹配最后匹配完成的位置
\n 匹配一个换行符
\t 匹配一个制表符
. 匹配任意字符,除了换行符
[…] 用来表示一组字符,单独列出;例[abc], 匹配字符’a’, ‘b’, ‘c’
[^…] 不在[] 中的字符;例[^abc], 匹配除了字符’a’, ‘b’, ‘c’ 外的所有字符
* 匹配 0个或多个的表达式
+ 匹配 1个或多个的表达式
? 匹配 0个或1个由前面的正则表达式定义的片段,非贪婪方式
{n} 精准匹配 n个前面表达式
{n,m} 匹配 n到m次由前面的正则表达式定义的片段,贪婪方式
a|b 匹配 a或b
() 匹配括号内的表达式,也表示一个组
& 匹配字符串的末尾

正则表达式的表示类型

re 库采用 raw string 类型表示正则表达式,表示为 r'正则表达式'

raw string 是不含 转义符的字符串

re的主要功能函数

函数 说明
re.search() 在一个字符串中搜索匹配正则表达式的第一个位置,返回 match 对象
re.match() 从一个字符串的开始位置起匹配正则表达式,返回 match 对象
re.findall() 搜索字符串,以列表类型返回全部能匹配的子串
re.split() 将一个字符串按照正则表达式匹配结果进行分割,返回列表类型
re.finditer() 搜索字符串,返回一个匹配结果的迭代类型,每个迭代元素是 match 对象
re.sub() 在一个字符串中替换所有匹配正则表达式的子串,返回替换后的字符串

函数参数:

  • pattern :正则表达式的字符串
  • string :待匹配字符串
  • flags : 正则表达式使用时的控制标记
    • re.I : 忽略正则表达式的大小写,即对大小写不敏感,[A-Z]能够匹配小写字符
    • re.M : 多行匹配,影响^和$
    • re.S :匹配包括换行符在内的所有字符

match对象的属性与方法

match对象的属性

  • match.string 返回待匹配的文本

  • match.re 返回正则表达式

  • match.pos 正则表达式开始搜索的位置

  • match.endpos 正则表达式搜索结束的位置

match对象的方法

  • match.group() 获得匹配后的字符串

  • match.start() 所匹配的字符串在原字符串的开始位置

  • match.end() 所匹配的字符串在原字符串的结束位置

  • match.span() 返回(match.start(),match.end())的元组

1. re.search (正则表达式,字符串 [,匹配模式])

search() 函数会扫描整个字符串,并且用 group() 函数 返回第一个满足正则表达式的字符串,匹配失败返回 None

re.search() 并不要求必须从字符串的开头进行匹配,也就是说,正则表达式可以是字符串任意位置开始的子串。

import re

str1 = '##123Abc!@#你好呀\n\r'
ret = re.search('\w',str1)
print(ret)
print(ret.group())
print(ret.span())

--> <re.Match object; span=(2, 3), match='1'>
--> 1
--> (2, 3)

2. re.match (正则表达式,字符串 [,匹配模式])

match() 函数和search() 函数的功能差不多,区别是 match() 函数是必须从字符串的开头匹配,如果开头不满足正则表达式,后面满足正则表达式的字符串也不会被匹配到。

example1:

import re

str1 = '##123Abc!@#你好呀\n\r'
ret = re.match('\W\W\w',str1)
print(ret)
print(ret.group())
print(ret.span())

--> <re.Match object; span=(0, 3), match='##1'>
--> ##1
--> (0, 3)

example2:

import re

str1 = '##123Abc!@#你好呀\n\r'
ret = re.match('\w',str1)
print(ret)

--> None

3. re.findall

  • 语法格式 re.findall('正则表达式',文本内容,修饰符)

在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果有多个匹配模式,则返回元组列表,如果没有找到匹配的,则返回空列表。

注意: match 和 search 是匹配一次 findall 匹配所有。

import re
 
text = '2023年,6月份, 23日'
pattern = re.compile(r'\d{4}年|\d{1}月|\d{2}日')
res = pattern.findall(text)
print(res)

--> ['2023年', '6月', '23日']

4. re.split

  • 语法格式 re.split('正则表达式','文本',[maxsplit=0])

maxsplit是允许被分割成几个子串,默认为 0,不限制次数。

import re
ret = re.split('\W+', 'runoob, runoob, runoob.')
print(ret)

ret = re.split('(\W+)', ' runoob, runoob, runoob.') 
print(ret)

ret = re.split('\W+', ' runoob, runoob, runoob.', 1) 
print(ret)
 
ret = re.split('aa*', 'hello world')   # 对于一个找不到匹配的字符串而言,split 不会对其作出分割
print(ret)

--> ['runoob', 'runoob', 'runoob', '']
--> ['', ' ', 'runoob', ', ', 'runoob', ', ', 'runoob', '.', '']
--> ['', 'runoob, runoob, runoob.']
--> ['hello world']

5. re.finditer (正则表达式,字符串 [,匹配模式])

和 findall 类似,在字符串中找到正则表达式所匹配的所有子串,并把它们作为一个迭代器返回。

ret = re.finditer('\w',str1)
for i in ret:
    print(i.group(),end='')#输出时不换行

6. re.sub (正则表达式, repl, 被替换的字符串 [, count=0, flags=0] )

re 模块提供了re.sub用于替换字符串中的匹配项。

repl 可以是替换的字符串,也可为一个函数。
count 表示模式匹配后替换的最大次数,默认 0 表示替换所有的匹配。

example1: repl 为字符串

#!/usr/bin/python
# -*- coding: UTF-8 -*-
 
import re
 
phone = "2004-959-559 # 这是一个国外电话号码"
 
# 删除字符串中的 Python注释 
num = re.sub(r'#.*$', "", phone)
print "电话号码是: ", num
 
# 删除非数字(-)的字符串 
num = re.sub(r'\D', "", phone)
print "电话号码是 : ", num

--> 电话号码是:  2004-959-559 
--> 电话号码是 :  2004959559

7. re.compile

该函数将创建一个正则表达式的对象,可以实现更有效率的复用。文章来源地址https://www.toymoban.com/news/detail-497105.html

import re
find_xx = re.compile('正则表达式',修饰符)
ret = find_xx.search(带匹配的字符串)

到了这里,关于正则表达式 re库的使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • hive中使用正则表达式匹配数字

    2024年02月14日
    浏览(50)
  • python re 模块 正则表达式

    ^ 表示匹配字符串的开始位置 (例外 用在中括号中[ ] 时,可以理解为取反,表示不匹配括号中字符串) $ 表示匹配字符串的结束位置 * 表示匹配 零次到多次(记忆方法: 符号是星星,天上的星星可以是无数个也可以看不到 ) + 表示匹配 一次到多次 (记忆方法: 符号是加号,增加

    2024年02月13日
    浏览(47)
  • 8.网络爬虫—正则表达式RE实战

    前言 : 🏘️🏘️个人简介:以山河作礼。 🎖️🎖️:Python领域新星创作者,CSDN实力新星认证 📝​📝​此专栏文章是专门针对网络爬虫基础,欢迎免费订阅! 📝​📝第一篇文章《1.认识网络爬虫》获得 全站热榜第一 ,python 领域热榜第一 , 第四篇文章《4.网络爬虫—

    2023年04月08日
    浏览(77)
  • Python 正则表达式RE知识学习

    正则表达式(Regular Expression)是一种强大的文本模式匹配工具,常用于在字符串中查找、替换、分割等操作。在 Python 中,可以使用内置的 re 模块来操作正则表达式。 字符匹配: 普通字符:正则表达式中的普通字符(如字母、数字、特殊字符)与字符串中的对应字符进行匹

    2024年02月09日
    浏览(58)
  • Python:正则表达式之re.group()用法

    Python正则表达式之re.group()用法学习笔记 正则表达式是在处理字符串时非常有用的工具,而re.group()是在匹配到的文本中提取特定分组内容的方法之一。 在正则表达式中,通过圆括号可以创建一个或多个分组。re.group()用于获取匹配到的文本中的指定分组内容。 输出结果: grou

    2024年01月17日
    浏览(45)
  • Python-re模块-正则表达式模块常用方法

    Python的re模块提供了正则表达式的功能,可以用来进行高级的字符串匹配和处理。re模块的主要功能包括: 编译正则表达式 - 使用re.compile()可以编译正则表达式字符串,生成正则表达式对象。 匹配字符串 - 使用正则表达式对象的match()、search()、findall()等方法可以在字符串进行匹配

    2024年02月14日
    浏览(45)
  • 006集 正则表达式 re 应用实例—python基础入门实例

    正则表达式指预先定义好一个 “ 字符串模板 ” ,通过这个 “ 字符串模 板” 可以匹配、查找和替换那些匹配 “ 字符串模板 ” 的字符串。 Python的中 re 模块,主要是用来处理正则表达式,还可以利用 re 模块通过正则表达式来进行网页数据的爬取和存储。 正则表达式的英文

    2024年02月01日
    浏览(59)
  • 正则表达式 (用于灵活匹配文本的表达式)

    目录 . * 用于匹配任意单个字符,除了换行符。 例如使用正则表达式 a.b, 它可以匹配aab、acb、a#b 用于匹配前一个字符零次或多次。 例如,使用正则表达式 ab*c ,它可以匹配 \\\"ac\\\"、\\\"abc\\\"、\\\"abbc\\\",因为 b* 表示匹配零个或多个字符 \\\"b\\\"。所以,这个表达式可以匹配 \\\"ac\\\"(零个 \\\"b\\\"),

    2024年01月16日
    浏览(64)
  • Java 正则表达式匹配

    正则表达式: 定义一个搜索模式的字符串。 正则表达式可以用于搜索、编辑和操作文本。 正则对文本的分析或修改过程为:首先正则表达式应用的是文本字符串(text/string),它会以定义的模式从左到右匹配文本,每个源字符只匹配一次。 正则表达式 匹配 this is text 精确匹配

    2024年02月06日
    浏览(63)
  • python re.findall和re.search同样的正则表达式,为什么规则不一样??

    今天遇到一个问题,在使用python的re.findall和re.search的过程中,发现一个奇怪的事情,同样的表达式,两者的表现却不一样,例如下述代码: res1是我所希望的结果,然后查了一段时间的原因,发现二者是在使用捕获分组(xxx)和非捕获分组(?:xxx)有区别,re.search使用的是非捕获方

    2024年02月16日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包