分别令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=" ; ")
代码运行结果: