正则表达式中的分组
- 2020-09-21 09:41:00
- 六月
- 来源:
- https://www.jb51.net/article/101177.htm
- 转贴 739
在正则表达式中,使用元字符 ( ) 来划分组。( ) 元字符跟数学表达式中的小括号含义差不多;它们将包含在内部的表达式组合在一起,所以你可以对一个组的内容使用重复操作的元字符,例如 *,+,? 或者 {m,n}。
例如,(ab)* 会匹配零个或者多个 ab:
>>> p = re.compile('(ab)*')
>>> print(p.match('ababababab').span())
(0, 10)
使用 ( ) 表示的子组我们还可以对它进行按层次索引,可以将索引值作为参数传递给这些方法:group(),start(),end() 和 span()。序号 0 表示第一个分组(这个是默认分组,一直存在的,所以不传入参数相当于默认值 0):
>>> p = re.compile('(a)b')
>>> m = p.match('ab')
>>> m.group()
'ab'
>>> m.group(0)
'ab'
有几对小括号就是分成了几个子组,例如 (a)(b) 和 (a(b)) 都是由两个子组构成的。
import re
text = 'The price A is $33,price B is $100'
ret = re.search(r".*(\$\d+).*(\$\d+)",text)
print(ret.group()) # The price A is $33,price B is $100
print(ret.group(0)) # The price A is $33,price B is $100
print(ret.group(1)) # $33
print(ret.group(2)) # $100
print(ret.group(1,2)) # ('$33', '$100')
print(ret.groups()) # ('$33', '$100')
参考: https://www.jb51.net/article/88742.htm