iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Python正则表达式基础知识有哪些
  • 441
分享到

Python正则表达式基础知识有哪些

2023-06-21 23:06:21 441人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

本篇内容主要讲解“python正则表达式基础知识有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python正则表达式基础知识有哪些”吧!1. 什么是正则表达式正则表达式(Regular E

本篇内容主要讲解“python正则表达式基础知识有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习Python正则表达式基础知识有哪些”吧!

1. 什么是正则表达式

正则表达式(Regular Expressions),也称为 “regex” 或 “regexp” 是使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串,这样程序就可以将该模式与任意文本字符串相匹配。

使用正则表达式,可以为要匹配的可能字符串集指定规则;此集可能包含英语句子,电子邮件地址,TeX命令或你喜欢的任何内容

正则表达式引擎

采用不同算法,检查处理正则表达式的软件模块 PCRE (perl compatible regular expressions)

正则表达式的元字符分类: 字符匹配,匹配次数,位置锚定,分组

Python的正则表达式是PCRE标准的。

2. 正则表达式基础

# 字符匹配

. 匹配任意单个字符(换行符除外)

[]匹配指定范围内的任意单个字符: [0-9] [a-z]

^[xxx]以[]内的任意字符开头

[^xxx]: 除了[]内的字符,相当于取反

# 匹配次数

用于指定前面的字符要出现几次

* 匹配前面的字符的任意次,包括0次, 贪婪匹配:尽可能长的匹配
.* 任意长度的任意字符
? 匹配其前面的字符0或1次
+ 匹配前面的字符至少1次
{n} 匹配前面的字符n次
{m,n} 匹配前面的字符至少m次,最多n次如{1,3} 匹配1到3次
{n,} 匹配前面的字符至少n次

# 位置锚定
# 用于定位出现的位置

^ 行首

$ 行尾

^$ 空行

# 分组
() 分组,用()将多个字符捆绑在一起,当作一个整体处理
后向引用: \1,\2

# | 或者
a|b a 或 b
(A|a)bc Abc或abc

# \ 转义
\ 反斜杠后面可以跟各种字符,以指示各种特殊序列。它也用于转义所有元字符.因此您仍然可以在模式中匹配它们,如果你需要匹配 [ 或 \,你可以在它们前面加一个反斜杠来移除它们的特殊含义:\[ 或 \\。
在python中取消转义推荐使用r,如果要匹配'\n',因为'\n'有特殊含义:回车。要匹配'\n'可以以写'\\n',在Python中可以使用r'\n'。

\d 匹配任何十进制数,等价于类 [0-9]
\w 匹配任何字母与数字字符包括下划线;这相当于类 [a-zA-Z0-9_]。
\s 匹配任何空白字符;这等价于类 [ \t\n\r\f\v]。

\D 匹配任何非数字字符;这等价于类 [^0-9]。
\W 匹配任何非字母与数字字符;这相当于类 [^a-zA-Z0-9_]。
\S 匹配任何非空白字符;这相当于类 [^ \t\n\r\f\v]。

3. Python中使用正则表达式

在python中使用正则表达式常用的模块为:re。

3.1 re常用的方法

# re.findall('正则表达式','待匹配的文本')  根据正则匹配出所有符合条件的数据,返回列表>>> re.findall('[0-9]', "Hello world 123")['1', '2', '3']# 如果匹配不到findall返回一个空列表# re.finditer('正则表达式','待匹配的文本') 根据正则匹配出所有符合条件的数据,返回一个对象>>> re.finditer('[0-9]', "Hello world 123")     <callable_iterator object at 0x7f3409296d68># 取值:>>> res = re.finditer('[0-9]', "Hello world 123")>>> for i in res:...     print(i.group())... 123# 如果匹配不到finditer返回空。# findall 和finditer功能一样,但是finditer更节省内存。# re.search('正则表达式','待匹配的文本')   根据正则匹配到一个符合条件的就结束>>> res = re.search('l', "Hello world 123")     >>> res<_sre.SRE_Match object; span=(2, 3), match='l'>>>> res.group()'l'# 匹配到一个就返回,group()返回具体的元素,如果匹配不到search返回None,使用group取值就会报错:AttributeError: 'NoneType' object has no attribute 'Goup'    # re.match('正则表达式','待匹配的文本') 根据正则从头开始匹配(文本内容必须在开头匹配上)>>> res = re.match('e', "Hello world 123")   # e 不在开头,所以匹配不上,返回None>>> print(res)None>>> res = re.match('H', "Hello world 123")  # H 为开头能匹配上>>> print(res)<_sre.SRE_Match object; span=(0, 1), match='H'>>>> print(res.group())H#如果没有匹配到,match会返回None 使用group取值的时候也会直接报错AttributeError: 'NoneType' object has no attribute 'group'# search和match匹配不到都会报错,可以处理一下:if res:    print(res.group())else:    print('没有匹配到')    # re.split 分割>>> re.split('[0-9]', "Hello 123 world")    # 按匹配到的分割,返回一个列表   ['Hello ', '', '', ' world'] # re.sub('要匹配的', '要替换的', '文本')  替换>>> re.sub('[0-9]','A', "Hello 123 world")  # 默认替换全部'Hello AAA world'>>> re.sub('[0-9]','A', "Hello 123 world",1) # 替换一次'Hello A23 world'>>> re.sub('[0-9]','A', "Hello 123 world",2) # 替换两次'Hello AA3 world'# re.subn() 和re.sub 功能一样,但是返回元组 并提示替换了几处>>> re.subn('[0-9]','A', "Hello 123 world")    ('Hello AAA world', 3)>>> re.subn('[0-9]','A', "Hello 123 world", 1)('Hello A23 world', 1)# 如果一个正则表达式在程序中经常用到,这样每次都写太麻烦,可以使用compile将正则表达式的样式编译为一个正则表达式对象 (正则对象)# 例如 正则表达式'^\d{3,6}'经常使用>>> obj = re.compile('^\d{3,6}')>>> obj.findall("123 Hello")['123']>>> res = obj.search("123 Hello")>>> res.group()'123'# obj还可以使用 finditer,match,split,subn,sub# 分组>>> res = re.search('[1-9]\d{16}([0-9x])','37152119841105155x')   >>> res.group()'37152119841105155x'>>> res.group(1)  # 只打印分组1里的内容,1为第一个分组,这里面只有([0-9x])所以打印x'x'>>> res = re.search('[1-9](\d{16})([0-9x])','37152119841105155x')>>> res.group() '37152119841105155x'>>> res.group(1)   # (\d{16}) 为第1个分组'7152119841105155'>>> res.group(2)# ([0-9x]) 为第2个分组'x'# 这种取分组里的值也为索引取值# findall优先打印出分组里的内容>>> re.findall('[1-9]\d{16}([0-9x])','37152119841105155x')['x']# 取消分组: ?:>>> res = re.findall('[1-9]\d{16}(?:[0-9x])','37152119841105155x')  >>> res   # (?:[0-9x])['37152119841105155x']# 上面的分组为无名分组,分组也可以有名字。# 有名分组  ?P<分组名称>>>> res = re.search('[1-9](?P<first>\d{16})(?P<second>[0-9x])','37152119841105155x')>>> res.group()'37152119841105155x'>>> res.group('first')'7152119841105155'>>> res.group('second')'x'# 分组后也可以使用索引到值:>>> res.group(2)       'x'

3.2 re模块练习

爬链家二手房前十页

import reimport requests for i in range(1,11):    url = 'https://bj.lianjia.com/ershoufang/pg{}srs%E6%97%A7%E5%AE%AB/'.fORMat(i)    r = requests.get(url)    title = re.findall('data-is_focus="" data-sl="">(.*?)</a>',r.text)    price = re.findall('<span>([0-9]{3})</span>',r.text)    address = re.findall('data-log_index="\d" data-el="region">(.*?)</a>', r.text)    houseIcon = re.findall('<span class="houseIcon"></span>(.*?)</div>', r.text)    res = zip(title,price,address,houseIcon)    for i in res:    # print("%s \t%s(万) \t%s\t%s" % (i[0], i[1], i[2], i[3]))         print("""    小区名: %s,    总价: %s万,    地址: %s,    房型: %s""" % (i[0], i[1], i[2], i[3]))    # 执行结果:[root@hans_tencent_Centos82 module]# python3 houses.py     小区名: 红星楼小区 南北通透一居室 满五唯一商品房,    总价: 185万,    地址: 红星楼 ,    房型: 1室1厅 | 46.46平米 | 南 北 | 简装 | 顶层(共6层) | 1989年建 | 板楼    小区名: 旧宫北里 2室2厅 南 北,    总价: 469万,    地址: 旧宫北里 ,    房型: 2室2厅 | 96.55平米 | 南 北 | 精装 | 高楼层(共9层) | 2004年建 | 板楼    小区名: 亦庄北岸 3室1厅 南 北,    总价: 558万,    地址: 亦庄北岸 ,    房型: 3室1厅 | 109.58平米 | 南 北 | 精装 | 中楼层(共15层) | 2008年建 | 板塔结合

参考内容:

Python官方文档

内容扩展:

Python对正则表达式的支持

Python提供了re模块来支持正则表达式相关操作,下面是re模块中的核心函数。

函数说明
compile(pattern, flags=0)编译正则表达式返回正则表达式对象
match(pattern, string, flags=0)用正则表达式匹配字符串 成功返回匹配对象 否则返回None
search(pattern, string, flags=0)搜索字符串中第一次出现正则表达式的模式 成功返回匹配对象 否则返回None
split(pattern, string, maxsplit=0, flags=0)用正则表达式指定的模式分隔符拆分字符串 返回列表
sub(pattern, repl, string, count=0, flags=0)用指定的字符串替换原字符串中与正则表达式匹配的模式 可以用count指定替换的次数
fullmatch(pattern, string, flags=0)match函数的完全匹配(从字符串开头到结尾)版本
findall(pattern, string, flags=0)查找字符串所有与正则表达式匹配的模式 返回字符串的列表
finditer(pattern, string, flags=0)查找字符串所有与正则表达式匹配的模式 返回一个迭代器
purge()清除隐式编译的正则表达式的缓存
re.I / re.IGNORECASE忽略大小写匹配标记
re.M / re.MULTILINE多行匹配标记

说明: 上面提到的re模块中的这些函数,实际开发中也可以用正则表达式对象的方法替代对这些函数的使用,如果一个正则表达式需要重复的使用,那么先通过compile函数编译正则表达式并创建出正则表达式对象无疑是更为明智的选择。

到此,相信大家对“Python正则表达式基础知识有哪些”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

--结束END--

本文标题: Python正则表达式基础知识有哪些

本文链接: https://www.lsjlt.com/news/301267.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Python正则表达式基础知识有哪些
    本篇内容主要讲解“Python正则表达式基础知识有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python正则表达式基础知识有哪些”吧!1. 什么是正则表达式正则表达式(Regular E...
    99+
    2023-06-21
  • 正则表达式基础知识点有哪些
    这篇“正则表达式基础知识点有哪些”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“正则表达式基础知识点有哪些”文章吧。正则表达式...
    99+
    2023-07-05
  • python正则表达式相关知识有哪些
    这篇文章主要为大家展示了“python正则表达式相关知识有哪些”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“python正则表达式相关知识有哪些”这篇文章吧。正则表达式模块Python 有一个名...
    99+
    2023-06-29
  • Python 正则表达式基础知识点及实例
    1. 什么是正则表达式 正则表达式(Regular Expressions),也称为 “regex” 或 “regexp” 是使用单个字符串来描述、匹配一系列匹配某个句法规则的字符...
    99+
    2024-04-02
  • Python中正则表达式的知识点有哪些
    这篇文章主要介绍了Python中正则表达式的知识点有哪些的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Python中正则表达式的知识点有哪些文章都会有所收获,下面我们一起来看看吧。1.1正则表达式正则表达式(R...
    99+
    2023-06-30
  • 正则表达式基础命令有哪些
    这期内容当中小编将会给大家带来有关正则表达式基础命令有哪些,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。我们在工作中经常会用到正则表达式,下面为大家整理了一下常用的命令。正则字符的简要说明“^” : ^会...
    99+
    2023-06-28
  • 正则表达式入门知识点有哪些
    这篇文章主要为大家展示了“正则表达式入门知识点有哪些”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“正则表达式入门知识点有哪些”这篇文章吧。1.正则表达式入门之什么是正则表达式基本说来,正则表达式...
    99+
    2023-06-17
  • python正则表达式常见的知识点有哪些
    本篇内容主要讲解“python正则表达式常见的知识点有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“python正则表达式常见的知识点有哪些”吧!一、介绍正则表达式是一个特殊的字符序列,计算...
    99+
    2023-06-30
  • javascript正则表达式的知识点有哪些
    本篇内容介绍了“javascript正则表达式的知识点有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!...
    99+
    2024-04-02
  • C#正则表达式的知识点有哪些
    这篇“C#正则表达式的知识点有哪些”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“C#正则表达式的知识点有哪些”文章吧。一、简...
    99+
    2023-06-30
  • java正则表达式的知识点有哪些
    这篇文章主要介绍“java正则表达式的知识点有哪些”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“java正则表达式的知识点有哪些”文章能帮助大家解决问题。字符x字符 x\\反斜线字符\0n...
    99+
    2023-06-29
  • C#基础知识之字符串和正则表达式
    目录Stringstring 和 stringbuilder字符串格式$前缀StringFormat转义花括号日期时间和数字的格式正则表达式组总结String System.Stri...
    99+
    2024-04-02
  • Python正则表达式有哪些
    小编给大家分享一下Python正则表达式有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1 前言正则表达式是对字符串(包括普通字符(例如,a 到 z 之间的字...
    99+
    2023-06-15
  • JavaScript中正则表达式的相关知识点有哪些
    小编给大家分享一下JavaScript中正则表达式的相关知识点有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!JavaScr...
    99+
    2024-04-02
  • 完整的正则表达式知识汇总(Python知
    ## 大纲: ## 一、正则概述 1.正则是什么 正则就是一套规则,或者语法 2.正则的作用 让我们判断是否符合我们的的规则,或者根据规则找到符合规则的数据 3.使用场景 可以用正则判断我们输入的邮箱是否合法 可以用正则去获取...
    99+
    2023-01-30
    完整 知识 正则表达式
  • Python正则表达式技巧有哪些
    本篇内容介绍了“Python正则表达式技巧有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、什么是Python则表达式在编写处理字符串...
    99+
    2023-06-17
  • Python中的正则表达式有哪些
    这篇文章给大家介绍Python中的正则表达式有哪些,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。什么是正则表达式?正则表达式(Regular Expression)通常被用来检索、替换那些符合某个模式(规则)的文本。此...
    99+
    2023-06-08
  • Python正则表达式写法有哪些
    这篇文章主要讲解了“Python正则表达式写法有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python正则表达式写法有哪些”吧!什么是正则表达式?正则表达式(Regular Expr...
    99+
    2023-06-15
  • java正则表达式有哪些
    这篇文章主要为大家展示了“java正则表达式有哪些”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“java正则表达式有哪些”这篇文章吧。 java正则表达式大全...
    99+
    2024-04-02
  • php正则表达式有哪些
    php正则表达式有"/pattern/"、"^"、"$"、"."、"[]"、"[^]"、"[a-z]"、"[A-Z]"、"[0-9]"、"\d"、"\D"、"\w"、"\W"、"\s"、"\S"、"\b"、"*"、"+"、""、"{n}"、...
    99+
    2023-11-17
    php PHP正则表达式
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作