Python高级(22)—正则表达式匹配

◎知识点

  1. 贪婪匹配与勉强匹配

  2. 分组匹配

  3. 逻辑匹配


◎脚本练习

▽ 贪婪匹配与勉强匹配

"""
    贪婪匹配:在匹配正则表达式时,使用尽可能长的子串去匹配。
    勉强匹配:在匹配正则表达式时,使用尽可能短的子串去匹配。
"""

import re

print(re.match(r'ab*', 'abbbbbbc'))     # <re.Match object; span=(0, 7), match='abbbbbb'>
print(re.match(r'ab*?', 'abbbbbbc'))    # <re.Match object; span=(0, 1), match='a'>

print(re.match(r'ab+', 'abbbbbbc'))     # <re.Match object; span=(0, 7), match='abbbbbb'>
print(re.match(r'ab+?', 'abbbbbbc'))    # <re.Match object; span=(0, 2), match='ab'>

print(re.match(r'ab?', 'abbbbbbc'))     # <re.Match object; span=(0, 2), match='ab'>
print(re.match(r'ab??', 'abbbbbbc'))    # <re.Match object; span=(0, 1), match='a'>

print(re.match(r'ab{3}', 'abbbbbbc'))   # <re.Match object; span=(0, 4), match='abbb'>
print(re.match(r'ab{3}?', 'abbbbbbc'))  # <re.Match object; span=(0, 4), match='abbb'>

print(re.match(r'ab{3,}', 'abbbbbbc'))  # <re.Match object; span=(0, 7), match='abbbbbb'>
print(re.match(r'ab{3,}?', 'abbbbbbc')) # <re.Match object; span=(0, 4), match='abbb'>

print(re.match(r'ab{3,5}', 'abbbbbbc')) # <re.Match object; span=(0, 6), match='abbbbb'>
print(re.match(r'ab{3,5}?', 'abbbbbbc'))    # <re.Match object; span=(0, 4), match='abbb'>

Python高级(22)—正则表达式匹配


分组匹配

"""
    可以使用小括号()将正则表达式中的部分内容括起来,从而将该部分内部作为一个分组。
    从正则表达式的左边往右数,第一个左小括号表示第1个分组,第二个左小括号表示第2个分组,...,
依次类推。因此,可以根据编号对分组进行引用。
"""

import re

matchobj = re.match(r'(\d+)-(\d+)', '025-3456abc')
print(matchobj) # <re.Match object; span=(0, 8), match='025-3456'>

print(matchobj.group(1))    # 025
print(matchobj.group(2))    # 3456
print(matchobj.group(0))    # 025-3456
print(matchobj.groups())    # ('025', '3456')

Python高级(22)—正则表达式匹配

Python高级(22)—正则表达式匹配


▽ 逻辑匹配

"""
    在正则表达式中可以使用|进行逻辑匹配,其匹配规则是:
先尝试匹配左边的表达式,如果匹配成功,则跳过匹配右边的表达式;如果匹配不成功,再匹配右边的表达式。
    如果|没有被包括在()中,则它的作用范围是整个正则表达式。
"""

import re

print(re.match(r'123|12', '123'))   # <re.Match object; span=(0, 3), match='123'>
print(re.match(r'abc|12', '123'))   # <re.Match object; span=(0, 2), match='12'>

print(re.match(r'P(ython|erl)', 'Python')) # <re.Match object; span=(0, 6), match='Python'>
print(re.match(r'P(ython|erl)', 'Perl'))   # <re.Match object; span=(0, 4), match='Perl'>


◎脚本地址:https://github.com/anzhihe/learning/blob/master/python/practise/learn-python/python_senior/regex2.py

anzhihe 安志合个人博客,版权所有 丨 如未注明,均为原创 丨 转载请注明转自:https://chegva.com/5642.html | ☆★★每天进步一点点,加油!★★☆ | 

您可能还感兴趣的文章!

发表评论

电子邮件地址不会被公开。 必填项已用*标注