分享

python中级----正则表达式进阶

 天选小丑 2022-10-08 发布于广西

重磅干货,第一时间送达

| 1. 元字符(Metacharacters)

元字符使正则表达式比普通的字符串方法更强大,它们允许您创建正则表达式来表示 <元音的一个或多个重复>等概念。

如果您想创建一个与字面元字符(如 “ ”)匹配的正则表达式(regex),元字符的存在会带来问题。您可以通过在元字符前面防止反斜杠来转义(逃逸)元字符来做到这一点。然而,这可能会导致问题,因为反斜杠在普通Python字符串也具有转义功能。这可能意味着连续放置三到四个反斜杠来完成所有转义。

Tips : 为了避免这种情况,您可以使用原始字符串,这是一个前面有一个< r >的普通字符串。我们在上一篇《python中级----正则表达式入门》中看到了原始字符串的使用。

图片

| 2. 元字符.(Dot)

我们来接触的第一个元字符是< >。它与除新行以外的任何字符相匹配。值得注意的是它只能匹配单个字符。

Example:

import re
pattern = r'gr.y'
if re.match(pattern, 'grey'): print('Match 1')
if re.match(pattern, 'gray'): print('Match 2')
if re.match(pattern, 'blue'): print('Match 3')# Match 1# Match 2

图片

| 3. 元字符^ && $(开始和结束)

接下来的两个元字符是>>。这两个字符分别匹配字符串的开始结束

Example:

import re
pattern = r'^gr.y$'
if re.match(pattern, 'grey'): print('Match 1')
if re.match(pattern, 'gray'): print('Match 2')
if re.match(pattern, 'stingray'):    print('Match 3')

Tips : 模式< ^gr.y$ >意味着字符串应该以gr开头,然后跟随除换行符以外的任何单个字符,并以y结尾。

图片

| 4. 字符类(Character Classes)

字符类提供了一种仅匹配特定字符集之一的方法。字符类是通过将其匹配的字符放在方括号( [ ] )来创建的。

Example:

import re
pattern = r'[aeiou]'
if re.search(pattern, 'grey'): print('Match 1')
if re.search(pattern, 'qwertyuiop'): print('Match 2')
if re.search(pattern, 'rhythm myths'): print('Match 3')

Tips : search()函数中的模式[aeiou]可以匹配包含其中任意一个字符的字符串。


字符类也可以匹配字符范围

Some Example:

  • [a-z]匹配任何小写字母字符

  • [G-P]匹配从G到P的任何大写字符

  • [0-9]匹配任何数字

  • 多个范围可以包含在一个类中。例如[A-Za-z]匹配任何字母

Example:

import re
pattern = r'[A-Z][A-Z][0-9]'
if re.search(pattern, 'LS8'): print('Match 1')
if re.search(pattern, 'E3'): print('Match 2')
if re.search(pattern, '1ab'):    print('Match 3')

Tips : 上面的实例中模式匹配包含两个大写字母后跟一个数字的字符串。

另一个重要内容:

在字符类的开头放置一个>以反转它。这会导致它与包含的字符以外的任何字符匹配。其他元字符如>>不具备特殊的含义,>也没有意义,除非他是字符类中的第一个字符。

Example:

import re
pattern = r'[^A-Z]'
if re.search(pattern, 'this is all quiet'): print('Match 1')
if re.search(pattern, 'AbCdEfG123'): print('Match 2')
if re.search(pattern, 'THISISALLSHOUTING'):    print('Match 3')

Tips : 模式[^A-Z]中不应该包括大写字符串。请注意,^应该包括在括号内,以反转字符类。

图片

| 5. 更多元字符

更多的元字符是< >、< >、< >、< >和< >。

以上内容指定了重复次数。

  • 元字符>的意思是匹配前一件事情匹配零次或多次。它试图尽可能多地匹配重复(贪婪模式),'前一件事情'可以是单个字符、字符类或者一组字符

Example:

import re
pattern = r'egg(spam)*'
if re.match(pattern, 'egg'): print('Match 1')
if re.match(pattern, 'eggspamspamegg'): print('Match 2')
if re.match(pattern, 'spam'): print('Match 3')# Match 1# Match 2

Tips : 上面的示例匹配以egg开头,后面跟着零个或多个spam的字符串。


  • 元字符> 与 >非常相似,只是它意味着一次或多次

Example:

import re
pattern = r'g+'
if re.match(pattern, 'g'): print('Match 1')
if re.match(pattern, 'gggggggggggggg'): print('Match 2')
if re.match(pattern, 'abc'): print('Match 3')# Match 1# Match 2

  • 元字符< > 意味着零次或一次

Example:

import re
pattern = r'ice(-)?cream'
if re.match(pattern, 'ice-cream'): print('Match 1')
if re.match(pattern, 'icecream'): print('Match 2')
if re.match(pattern, 'sausages'): print('Match 3')
if re.match(pattern, 'ice--ice'): print('Match 4')

图片

| 6. 大括号(Curly Braces)

大括号可用于表示两个数字之间的重复次数。正则表达式{x,y}的意思是'重复x次或y次'。因此,{0,1} > 和 >是一回事。值得一提的是如果第一个数字缺失,会自动用0填补,如果缺少第二个数字,则将其取为无穷大。

Example:

import re
pattern = r'9{1,3}$'
if re.match(pattern, '9'): print('Match 1')
if re.match(pattern, '999'): print('Match 2')
if re.match(pattern, '9999'): print('Match 3')

Tips : '9{1,3}$'可以匹配1到3个9的字符串。

图片

| 7. 写在最后

本节给大家介绍了Python中非常有用的正则表达式进阶内容,如果您耐心看完了本篇,您应该掌握了re模块以及充分理解了元字符,下一篇我们会说明更加有用的组和特别序列以及一个实战练习---邮件提取。勤能补拙是良训,希望大家还是动手做一做,有问题可以私信我,欢迎交流和提出您的宝贵意见。

勘误:

由于我自己也不是资深编程高手,在创作此内容时尽管已经力求精准,查阅了诸多资料,还是难保有所疏漏,如果各位发现有误可以公众号内留言,欢迎指正。

你要偷偷学Python,然后惊艳所有人。

图片


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多