正则表达式中的分组

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

https://fishc.com.cn/thread-57271-1-1.html

https://www.cnblogs.com/OliverQin/p/12618725.html

发表评论
评论通过审核后显示。