正则表达式匹配分组(6)详解程序员

正则表达式匹配分组(6)


1. 匹配分组相关正则表达式

代码功能
|匹配左右任意一个表达式
(ab)将括号中字符作为一个分组
/num引用分组num匹配到的字符串
(?P)分组起别名
(?P=name)引用别名为name分组匹配到的字符串

示例1:|
需求:在列表中[“apple”, “banana”, “orange”, “pear”],匹配apple和pear

import re 
 
# 水果列表 
fruit_list = ["apple", "banana", "orange", "pear"] 
 
# 遍历数据 
for value in fruit_list: 
    # |    匹配左右任意一个表达式 
    match_obj = re.match("apple|pear", value) 
    if match_obj: 
        print("%s是我想要的" % match_obj.group()) 
    else: 
        print("%s不是我要的" % value) 

执行结果:

apple是我想要的 
banana不是我要的 
orange不是我要的 
pear是我想要的 

示例2:( )
需求:匹配出163、126、qq等邮箱

import re 
 
match_obj = re.match("[a-zA-Z0-9_]{4,20}@(163|126|qq|sina|yahoo)/.com", "[email protected]") 
if match_obj: 
    print(match_obj.group()) 
    # 获取分组数据 
    print(match_obj.group(1)) 
else: 
    print("匹配失败") 

执行结果:

hello@163.com 
163 

需求: 匹配qq:10567这样的数据,提取出来qq文字和qq号码

import re 
 
match_obj = re.match("(qq):([1-9]/d{4,10})", "qq:10567") 
 
if match_obj: 
    print(match_obj.group()) 
    # 分组:默认是1一个分组,多个分组从左到右依次加1 
    print(match_obj.group(1)) 
    # 提取第二个分组数据 
    print(match_obj.group(2)) 
else: 
    print("匹配失败") 

执行结果:

qq 
10567 

示例3:/num
需求:匹配出hh

match_obj = re.match("<[a-zA-Z1-6]+>.*</[a-zA-Z1-6]+>", "<html>hh</div>") 
 
if match_obj: 
    print(match_obj.group()) 
else: 
    print("匹配失败") 
 
match_obj = re.match("<([a-zA-Z1-6]+)>.*<///1>", "<html>hh</html>") 
 
if match_obj: 
    print(match_obj.group()) 
else: 
    print("匹配失败") 

运行结果:

<html>hh</div> 
<html>hh</html> 

需求:匹配出

www.itcast.cn

match_obj = re.match("<([a-zA-Z1-6]+)><([a-zA-Z1-6]+)>.*<///2><///1>", "<html><h1>www.itcast.cn</h1></html>") 
 
if match_obj: 
    print(match_obj.group()) 
else: 
    print("匹配失败") 

运行结果:

<html><h1>www.itcast.cn</h1></html> 

示例4:(?P<name>) (?P=name)
需求:匹配出<html><h1>www.itcast.cn</h1></html>

match_obj = re.match("<(?P<name1>[a-zA-Z1-6]+)><(?P<name2>[a-zA-Z1-6]+)>.*</(?P=name2)></(?P=name1)>", "<html><h1>www.itcast.cn</h1></html>") 
 
if match_obj: 
    print(match_obj.group()) 
else: 
    print("匹配失败") 

运行结果:

<html><h1>www.itcast.cn</h1></html> 

2. 小结

  • | 表示匹配左右任意一个表达式
  • (ab) 表示将括号中字符作为一个分组
  • /num 表示引用分组num匹配到的字符串
  • (?P) 表示分组起别名
  • (?P=name) 表示引用别名为name分组匹配到的字符串
  • (分组数据):分组数是从左到右的方式进行分配的,最左边的是第一个分组,依次类推

原创文章,作者:Maggie-Hunter,如若转载,请注明出处:https://blog.ytso.com/1327.html

(0)
上一篇 2021年7月15日
下一篇 2021年7月15日

相关推荐

发表回复

登录后才能评论