重磅干货,第一时间送达 | 1. 元字符(Metacharacters) 元字符使正则表达式比普通的字符串方法更强大,它们允许您创建正则表达式来表示 <元音的一个或多个重复>等概念。 如果您想创建一个与字面元字符(如 “ $ ”)匹配的正则表达式(regex),元字符的存在会带来问题。您可以通过在元字符前面防止反斜杠来转义(逃逸)元字符来做到这一点。然而,这可能会导致问题,因为反斜杠在普通Python字符串也具有转义功能。这可能意味着连续放置三到四个反斜杠来完成所有转义。 Tips : 为了避免这种情况,您可以使用原始字符串,这是一个前面有一个< r >的普通字符串。我们在上一篇《python中级----正则表达式入门》中看到了原始字符串的使用。 | 2. 元字符.(Dot) 我们来接触的第一个元字符是< . >。它与除新行以外的任何字符相匹配。值得注意的是它只能匹配单个字符。 Example:
| 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:
Tips : search()函数中的模式[aeiou]可以匹配包含其中任意一个字符的字符串。 字符类也可以匹配字符范围: Some Example:
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:
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:
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:
Tips : '9{1,3}$'可以匹配1到3个9的字符串。 | 7. 写在最后 本节给大家介绍了Python中非常有用的正则表达式进阶内容,如果您耐心看完了本篇,您应该掌握了re模块以及充分理解了元字符,下一篇我们会说明更加有用的组和特别序列以及一个实战练习---邮件提取。勤能补拙是良训,希望大家还是动手做一做,有问题可以私信我,欢迎交流和提出您的宝贵意见。 勘误: 由于我自己也不是资深编程高手,在创作此内容时尽管已经力求精准,查阅了诸多资料,还是难保有所疏漏,如果各位发现有误可以公众号内留言,欢迎指正。
|
|