2024-04-26 17:47:24 发布
网友
在下面的代码段中,匹配结果中应忽略非捕获组"(?:aaa)"
"(?:aaa)"
结果应仅为"_bbb"。
"_bbb"
然而,我在匹配结果中得到"aaa_bbb";只有当我指定组(2)时,它才会显示"_bbb"
"aaa_bbb"
>>> import re >>> s = "aaa_bbb" >>> print(re.match(r"(?:aaa)(_bbb)", s).group()) aaa_bbb
group()和group(0)将返回整个匹配项。后续组是实际的捕获组
group()
group(0)
>>> print (re.match(r"(?:aaa)(_bbb)", string1).group(0)) aaa_bbb >>> print (re.match(r"(?:aaa)(_bbb)", string1).group(1)) _bbb >>> print (re.match(r"(?:aaa)(_bbb)", string1).group(2)) Traceback (most recent call last): File "<stdin>", line 1, in ? IndexError: no such group
如果您想要与group()相同的行为:
" ".join(re.match(r"(?:aaa)(_bbb)", string1).groups())
TFM:
class re.MatchObject
group([group1, ...])
返回匹配项的一个或多个子组。如果只有一个参数,则结果是一个字符串;如果有多个参数,则结果是一个元组,每个参数有一个项如果没有参数,group1默认为零(返回整个匹配项)。如果groupN参数为零,则相应的返回值为整个匹配字符串。
我认为你误解了“非捕获群体”的概念。由非捕获组匹配的文本仍然成为整个正则表达式匹配的一部分
regex(?:aaa)(_bbb)和regex(aaa)(_bbb)都返回aaa_bbb作为整体匹配。不同之处在于,第一个正则表达式有一个捕获组返回_bbb作为其匹配项,而第二个正则表达式有两个捕获组返回aaa和_bbb作为其各自的匹配项。在Python代码中,要获得_bbb,需要对第一个正则表达式使用group(1),对第二个正则表达式使用group(2)
(?:aaa)(_bbb)
(aaa)(_bbb)
aaa_bbb
_bbb
aaa
group(1)
group(2)
非捕获组的主要好处是,您可以将它们添加到正则表达式中,而不会打乱正则表达式中捕获组的编号。它们还提供(稍微)更好的性能,因为正则表达式引擎不必跟踪非捕获组匹配的文本
如果确实要从整个正则表达式匹配中排除aaa,则需要使用lookaround。在这种情况下,正向查找会起作用:(?<=aaa)_bbb。使用这个正则表达式,group()在Python中返回_bbb。不需要捕获组
(?<=aaa)_bbb
我的建议是,如果您能够使用捕获组来获取正则表达式匹配的一部分,请使用该方法,而不是四处查看
group()
和group(0)
将返回整个匹配项。后续组是实际的捕获组如果您想要与
group()
相同的行为:" ".join(re.match(r"(?:aaa)(_bbb)", string1).groups())
TFM:
class re.MatchObject
group([group1, ...])
返回匹配项的一个或多个子组。如果只有一个参数,则结果是一个字符串;如果有多个参数,则结果是一个元组,每个参数有一个项如果没有参数,group1默认为零(返回整个匹配项)。如果groupN参数为零,则相应的返回值为整个匹配字符串。
我认为你误解了“非捕获群体”的概念。由非捕获组匹配的文本仍然成为整个正则表达式匹配的一部分
regex
(?:aaa)(_bbb)
和regex(aaa)(_bbb)
都返回aaa_bbb
作为整体匹配。不同之处在于,第一个正则表达式有一个捕获组返回_bbb
作为其匹配项,而第二个正则表达式有两个捕获组返回aaa
和_bbb
作为其各自的匹配项。在Python代码中,要获得_bbb
,需要对第一个正则表达式使用group(1)
,对第二个正则表达式使用group(2)
非捕获组的主要好处是,您可以将它们添加到正则表达式中,而不会打乱正则表达式中捕获组的编号。它们还提供(稍微)更好的性能,因为正则表达式引擎不必跟踪非捕获组匹配的文本
如果确实要从整个正则表达式匹配中排除
aaa
,则需要使用lookaround。在这种情况下,正向查找会起作用:(?<=aaa)_bbb
。使用这个正则表达式,group()
在Python中返回_bbb
。不需要捕获组我的建议是,如果您能够使用捕获组来获取正则表达式匹配的一部分,请使用该方法,而不是四处查看
相关问题 更多 >
编程相关推荐