Python教程

Python正则表达式--分组

本文主要是介绍Python正则表达式--分组,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

1.正则表达式的分组

  分组就是用一对圆括号“()”括起来的正则表达式,匹配出的内容就表示一个分组。从正则表达式的左边开始看,看到的第一个

左括号“(”表示第一个分组,第二个表示第二个分组,依次类推,需要注意的是,有一个隐含的全局分组(就是0),就是整个正则

表达式。分完组以后,要想获得某个分组的内容,直接使用group(num)和groups()函数去直接提取就行。

1 # 匹配区号
2 phone = '0713-2875338'
3 result = re.match(r'(\d{3}|\d{4})-(\d{7})$', phone)
4 print(result)  # >> <re.Match object; span=(0, 12), match='0713-2875338'>
5 print(result.group(1))  # >> 0713
6 print(result.group(2))  # >> 2875338
1 result = re.match(r'<([0-9a-zA-Z]+)>(.+)</\1>$', msg1)  # \1表示和第一组的一样
2 print(result)  # >> <re.Match object; span=(0, 14), match='<h1>hello</h1>'>
3 print(result.group(1))  # >> h1
4 print(result.group(2))  # >> hello
1 msg = '<html><h1>hello</h1></html>'
2 result = re.match(r'<([0-9a-zA-Z]+)><([0-9a-zA-Z]+)>(.+)</\2></\1>$', msg) # \2表示和第二组<([0-9a-zA-Z]+)>匹配一样,\1表示和第一组<([0-9a-zA-Z]+)>匹配一样
3 print(result)  # >> <re.Match object; span=(0, 27), match='<html><h1>hello</h1></html>'>
4 print(result.group(1))  # >> html
5 print(result.group(2))  # >> h1
6 print(result.group(3))  # >> hello
上面所用到的\1和\21...用起来很混乱,所以怎么解决呢?
可以用(?P<命名>) 后面引用(?P=命名)

1 msg = '<html><h1>hello</h1></html>'
2 result = re.match(r'<(?P<name1>[0-9a-zA-Z]+)><(?P<name2>[0-9a-zA-Z]+)>(.+)</(?P=name2)></(?P=name1)>', msg)
3 print(result)  # >> <re.Match object; span=(0, 27), match='<html><h1>hello</h1></html>'>
4 print(result.group(1))  # >> html
5 print(result.group(2))  # >> h1
6 print(result.group(3))  # >> hello

 

这篇关于Python正则表达式--分组的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!