文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Python正则表达式的使用方法是什么

2023-06-16 20:10

关注

这篇文章主要讲解了“Python正则表达式的使用方法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python正则表达式的使用方法是什么”吧!

什么是正则表达式?

简而言之,正则表达式(regex)用于探索给定字符串中的固定模式。

我们想找到的模式可以是任何东西。

可以创建类似于查找电子邮件或手机号码的模式。还可以创建查找以a开头、以z结尾的字符串的模式。

在上面的例子中:

import re pattern = r'[,;.,–]' print(len(re.findall(pattern,string)))

我们想找出的模式是  r’[,;.,–]’。这个模式可找出想要的4个字符中的任何一个。regex101是一个用于测试模式的工具。将模式应用到目标字符串时,呈现出以下界面。

Python正则表达式的使用方法是什么

如图所示,可以在目标字符串中根据需要找到,;.,–。

每当需要测试正则表达式时,都会用到上面的工具。这比一次又一次运行python要快得多,调试也容易得多。

现在我们已经可以在目标字符串中找到这些模式,那么如何真正创建这些模式呢?

创建模式

使用正则表达式时,首先需要学习的是如何创建模式。

接下来将对一些最常用的模式进行逐一介绍。

可以想到最简单的模式是一个简单的字符串。

pattern = r'times' string = "It was the best of times, it was the worst of times." print(len(re.findall(pattern,string)))

但这并不是很有用。为了帮助创建复杂的模式,正则表达式提供了特殊的字符/操作符。下面来逐个看看这些操作符。请等待gif加载。

1.[]操作符

这在第一个例子中使用过,可用于找到符合这些方括号中条件的一个字符。

[abc]-将查找文本中出现的所有a、b或c

[a-z]-将查找文本中出现的所有从a到z的字母

[a-z0–9A-Z]-将查找文本中出现的所有从A到Z的大写字母、从a到z的小写字母和从0到9的数字。

Python正则表达式的使用方法是什么

可以很容易地在Python中运行下列代码:

pattern = r'[a-zA-Z]' string = "It was the best of times, it was the worst of times." print(len(re.findall(pattern,string)))

除了.findall,正则表达式还有很多其他功能,稍后会涉及到。

2.点算符

点运算符(.) 用于匹配除换行符以外的任何字符。

运算符最大的优点是,它们可以结合使用。

例如,想在字符串中找出以小d或大写D开头,以字母e结尾,包含6个字母的子字符串。

3.一些元序列

在使用正则表达式时,一些模式会经常被用到。因此正则表达式为这些模式创建了一些快捷方式。最常用的快捷方式如下:

\w,匹配任何字母、数字或下划线。相当于[a-zA-Z0–9_]

\W,匹配除字母、数字或下划线以外的任何内容。

\d,匹配任何十进制数字。相当于[0–9]。

\D,匹配除十进制数字以外的任何数字。

4.加号和星形运算符

点算符只是用于获取任何字符的单个实例。如果想找出更多实例要怎么做呢?

加号+用于表示最左边字符的一个或多个实例。

星号*用于表示最左边字符的0个或多个实例。

例如,如果想找出所有以d开头,以e结尾的子字符串,d和e之间可以没有也可以有多个字符。我们可以用:d\w*e

如果想找出所有以d开头,以e结尾的子字符串,在d和e之间至少有一个字符,我们可以用:d\w+e

还可以使用更为通用的方法:用{}

\w{n} - 重复\w 正好n次。

\w{n,} - 重复\w至少n次,或者更多次。

\w{n1, n2} - 重复 \w 至少n1次,但不超过n2次。

5.^插入符号和$美元符号。

^插入符号匹配字符串的开始,而$美元符号则匹配字符串的结尾。

6.单词边界

这是一个重要的概念。

有没有注意到,在上面的例子中,总是匹配子字符串,而不是匹配单词?

如果想找出所有以d开头的单词呢?

可以使用d\w*模式吗?下面用网络工具来试一试吧。

正则表达式函数

目前为止,只使用了 re包中的findall 函数,其实还有很多其他函数。下面来逐个介绍。

1. findall

上面已经使用了 findall。这是我最常使用的一个。下面来正式认识一下这个函数吧。

输入:模式和测试字符串

输出:字符串列表。

#USAGE: pattern = r'[iI]t' string = "It was the best of times, it was the worst of times." matches = re.findall(pattern,string) for match in matches: print(match)------------------------------------------------------------ It it

2.搜索

输入:模式和测试字符串

输出:首次匹配的位置对象。

#USAGE: pattern = r'[iI]t' string = "It was the best of times, it was the worst of times." location = re.search(pattern,string) print(location) ------------------------------------------------------------ <_sre.SRE_Match object; span=(0, 2), match='It'>

可以使用下面编程获取该位置对象的数据:

print(location.group()) ------------------------------------------------------------ 'It'

3.替换

这个功能也很重要。当使用自然语言处理程序时,有时需要用X替换整数,或者可能需要编辑一些文件。任何文本编辑器中的查找和替换都可以做到。

输入:搜索模式、替换模式和目标字符串

输出:替换字符串

  1. string = "It was the best of times, it was the worst of times." 

  2. string = re.sub(r'times', r'life', string) 

  3. print(string) 

  4. ------------------------------------------------------------ 

  5. It was the best of life, it was the worst of life. 


案例研究

正则表达式在许多需要验证的情况下都会用到。我们可能会在网站上看到类似这样的提示:“这不是有效的电子邮件地址”。虽然可以使用多个if和else条件来编写这样的提示,但正则表达式可能更具优势。

1.PAN编号

在美国,SSN(社会安全号码)是用于税务识别的号码,而在印度,税务识别用的则是  PAN号码。PAN的基本验证标准是:上面所有的字母都必须大写,字符的顺序如下:

那么问题是:

“ABcDE1234L”是有效的PAN号码吗?

如果没有正则表达式,该如何回答这个问题呢?可能会编写一个for循环,并进行遍历搜索。但如果用正则表达式,那就像下面这样简单:

match=re.search(r&rsquo;[A-Z]{5}[0&ndash;9]{4}[A-Z]&rsquo;,'ABcDE1234L') if match:  print(True) else:  print(False) ----------------------------------------------------------------- False

2.查找域名

有时我们必须从一个庞大的文本文档中找出电话号码、电子邮件地址或域名等。

例如,假设有以下文本:

<div class="reflist" style="list-style-type: decimal;"> <ol class="references"> <li id="cite_note-1"><span class="mw-cite-backlink"><b>^ ["Train (noun)"](http://www.askoxford.com/concise_oed/train?view=uk). <i>(definition &ndash; Compact OED)</i>. Oxford University Press<span class="reference-accessdate">. Retrieved 2008-03-18</span>.</span><span title="ctx_ver=Z39.88-2004&rfr_id=info%3Asid%2Fen.wikipedia.org%3ATrain&rft.atitle=Train+%28noun%29&rft.genre=article&rft_id=http%3A%2F%2Fwww.askoxford.com%2Fconcise_oed%2Ftrain%3Fview%3Duk&rft.jtitle=%28definition+%E2%80%93+Compact+OED%29&rft.pub=Oxford+University+Press&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal" class="Z3988"><span style="display:none;"> </span></span></span></li> <li id="cite_note-2"><span class="mw-cite-backlink"><b>^</b></span> <span class="reference-text"><span class="citation book">Atchison, Topeka and Santa Fe Railway (1948). <i>Rules: Operating Department</i>. p. 7.</span><span title="ctx_ver=Z39.88-2004&rfr_id=info%3Asid%2Fen.wikipedia.org%3ATrain&rft.au=Atchison%2C+Topeka+and+Santa+Fe+Railway&rft.aulast=Atchison%2C+Topeka+and+Santa+Fe+Railway&rft.btitle=Rules%3A+Operating+Department&rft.date=1948&rft.genre=book&rft.pages=7&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook" class="Z3988"><span style="display:none;"> </span></span></span></li> <li id="cite_note-3"><span class="mw-cite-backlink"><b>^ [Hydrogen trains](http://www.hydrogencarsnow.com/blog2/index.php/hydrogen-vehicles/i-hear-the-hydrogen-train-a-comin-its-rolling-round-the-bend/)</span></li> <li id="cite_note-4"><span class="mw-cite-backlink"><b>^ [Vehicle Projects Inc. Fuel cell locomotive](http://www.bnsf.com/media/news/articles/2008/01/2008-01-09a.html)</span></li> <li id="cite_note-5"><span class="mw-cite-backlink"><b>^</b></span> <span class="reference-text"><span class="citation book">Central Japan Railway (2006). <i>Central Japan Railway Data Book 2006</i>. p. 16.</span><span title="ctx_ver=Z39.88-2004&rfr_id=info%3Asid%2Fen.wikipedia.org%3ATrain&rft.au=Central+Japan+Railway&rft.aulast=Central+Japan+Railway&rft.btitle=Central+Japan+Railway+Data+Book+2006&rft.date=2006&rft.genre=book&rft.pages=16&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook" class="Z3988"><span style="display:none;"> </span></span></span></li> <li id="cite_note-6"><span class="mw-cite-backlink"><b>^ ["Overview Of the existing Mumbai Suburban Railway"](http://web.archive.org/web/20080620033027/http://www.mrvc.indianrail.gov.in/overview.htm). _Official webpage of Mumbai Railway Vikas Corporation_. Archived from [the original](http://www.mrvc.indianrail.gov.in/overview.htm) on 2008-06-20<span class="reference-accessdate">. Retrieved 2008-12-11</span>.</span><span title="ctx_ver=Z39.88-2004&rfr_id=info%3Asid%2Fen.wikipedia.org%3ATrain&rft.atitle=Overview+Of+the+existing+Mumbai+Suburban+Railway&rft.genre=article&rft_id=http%3A%2F%2Fwww.mrvc.indianrail.gov.in%2Foverview.htm&rft.jtitle=Official+webpage+of+Mumbai+Railway+Vikas+Corporation&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal" class="Z3988"><span style="display:none;"> </span></span></span></li> </ol> </div>

需要从上面文本中找出这里所有的域名&mdash;&mdash;  askoxford.com;bnsf.com;hydrogencarsnow.com;mrvc.indianrail.gov.in;web.archive.org

该怎么做?

match=re.findall(r'http(s:|:)\/\/(www.|ww2.|)([0-9a-z.A-Z-]*\.\w{2,3})',string) for elem in match:  print(elem) -------------------------------------------------------------------- (':', 'www.', 'askoxford.com') (':', 'www.', 'hydrogencarsnow.com') (':', 'www.', 'bnsf.com') (':', '', 'web.archive.org') (':', 'www.', 'mrvc.indianrail.gov.in') (':', 'www.', 'mrvc.indianrail.gov.in')

这里用到了or运算符,match返回元组,保留()里的模式部分。

3.查找电子邮件地址:

下面的正则表达式用于在长文本中查找电子邮件地址。

match=re.findall(r'([\w0-9-._]+@[\w0-9-.]+[\w0-9]{2,3})',string)

这些都是高级示例,提供的信息已经足够帮你理解这些示例了。

感谢各位的阅读,以上就是“Python正则表达式的使用方法是什么”的内容了,经过本文的学习后,相信大家对Python正则表达式的使用方法是什么这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     801人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     348人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     311人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     432人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     220人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯