分别令p=p1~p2,运行下列代码,对运行结果进行分析Match、Serach的区别及group()、 groups()方法中各元素的含义。

 分别令p=p1~p2,运行下列代码,对运行结果进行分析Match、Serach的区别及group()、 groups()方法中各元素的含义。

import re

s="<Head>Hello world!</Head> "
p1="(?<=<(\w{4})>)(.*)(?=<\/\\1>)"
p2="(<(\w{4})>)(.*)(?=<\/\\2>)"

p=p1
print('\np=p1')
g=re.match(p, s)
if (g):
    print("Match方法:", g.groups(), g.group())
    for i in range(0, len(g.groups())+1):
        print("group({0}):内容={1}; 位置={2}".format(i,g.group(i),g.span(i)) , sep=" ; ")
    
g=re.search(p, s)
if (g):
    print("Serach方法:", g.groups(), g.group())
    for i in range(0, len(g.groups())+1):
        print("group({0}):内容={1}; 位置={2}".format(i,g.group(i),g.span(i)) , sep=" ; ")
    
p=p2
print('\np=p2')
g=re.match(p, s)
if (g):
    print("Match方法:", g.groups(), g.group())
    for i in range(0, len(g.groups())+1):
        print("group({0}):内容={1}; 位置={2}".format(i,g.group(i),g.span(i)) , sep=" ; ")
    
g=re.search(p, s)
if (g):
    print("Serach方法:", g.groups(), g.group())
    for i in range(0, len(g.groups())+1):
        print("group({0}):内容={1}; 位置={2}".format(i,g.group(i),g.span(i)) , sep=" ; ")

推荐一个正则表达式在线运行测试工具网址 :https://c.runoob.com/front-end/854/

# 注释可能有误,欢迎留言私信指教
import re
s = "<Head>Hello world!</Head> "
p1 = "(?<=<(\w{4})>)(.*)(?=<\/\\1>)"
"""
<(\w{4})>查找出现在<和>之间的四个字母。
(.*)任意多个字符串
(?<=<(\w{4})>)匹配出现在<Head>后面的任意字符,即Hello world!</Head> 
\1引用第1个分组
(?<=<(\w{4})>)(.*)(?=<\/\\1>)匹配Hello world!
"""
p = p1
print('p=p1')
"""
match和search的方法比较相似,都是在一个字符串s中寻找P1子字符串。
如果能找到,就返回一个Match对象,如果找不到,就返回None。
但是不同的是,mtach方法是从头开始匹配,而search方法,可以在s字符串的任一位置查找。
"""
g = re.match(p, s)
if (g):
    print("Match方法:", g.groups(), g.group())  # groups方法用于返回所有分组匹配结果组成的元组。group()同 group(0),匹配正则表达式整体结果
    for i in range(0, len(g.groups()) + 1):
        print("group({0}):内容={1}; 位置={2}".format(i, g.group(i), g.span(i)), sep=" ; ")  #group(i)传入参数i将返回第i个匹配的捕获组(即正则表达式中用括号括起来的部分)。
else:
    print(f"Match方法:{g}")
g = re.search(p, s)
if (g):
    print("\nSerach方法:", g.groups(), g.group())
    for i in range(0, len(g.groups()) + 1):
        print("group({0}):内容={1}; 位置={2}".format(i, g.group(i), g.span(i)), sep=" ; ")
p2 = "(<(\w{4})>)(.*)(?=<\/\\2>)"
"""
(<(\w{4})>)匹配出现在<和>之间的四个字母
(.*)匹配任意多个字符
(<(\w{4})>)(.*)匹配<Head>Hello world!</Head>
\2引用第二个分组
(?=<\/\\2>)匹配出现在<\Head>后面的任意字符
(<(\w{4})>)(.*)(?=<\/\\2>)匹配<Head>Hello world!
"""
p = p2
print('\np=p2')
"""
match和search的方法比较相似,都是在一个字符串s中寻找pP2子字符串。
如果能找到,就返回一个Match对象,如果找不到,就返回None。
但是不同的是,mtach方法是从头开始匹配,而search方法,可以在s字符串的任一位置查找。
"""
g = re.match(p, s)
if (g):
    print("Match方法:", g.groups(), g.group())
    for i in range(0, len(g.groups()) + 1):
        print("group({0}):内容={1}; 位置={2}".format(i, g.group(i), g.span(i)), sep=" ; ")

g = re.search(p, s)
if (g):
    print("\nSerach方法:", g.groups(), g.group())
    for i in range(0, len(g.groups()) + 1):
        print("group({0}):内容={1}; 位置={2}".format(i, g.group(i), g.span(i)), sep=" ; ")

代码运行结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

风起晨曦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值