【问题标题】:python group(0) meaningpython group(0) 含义
【发布时间】:2016-04-19 20:24:41
【问题描述】:

group(0) 的确切定义是什么 研究?

有时搜索会变得复杂,我想知道根据定义假定的 group(0) 值是什么?

只是为了举例说明混淆的来源,请考虑这种匹配。打印的结果只有def。所以在这种情况下 group(0) 没有返回整个匹配。

 m = re.search('(?<=abc)def', 'abcdef')
>>> m.group(0)
def

【问题讨论】:

标签: python regex


【解决方案1】:

match_object.group(0) 表示选择match_object 的整个部分。

另外group(0)可以通过与group(1), group(2), group(3), ..., group(n)比较来解释。 Group(0) 定位整个匹配表达式。然后使用括号来确定更多匹配位置:group(1) 表示第一个括号对定位匹配表达式 1,group(2) 表示第二个下一个括号对定位匹配表达式 2,依此类推。在每种情况下,左括号通过使用最远的右括号形成括号对来确定下一个括号对。这可能听起来令人困惑,这就是为什么下面有一个示例。

但是您需要区分'(?&lt;=abc)' 括号的语法。这些括号有不同的语法含义,即定位'?&lt;='所绑定的内容。所以你的主要问题是你不知道'?&lt;=' 做了什么。这就是所谓的look-behind,意思是它匹配它所绑定的表达式后面的部分。

在以下示例中,'abc' 被后视绑定。

不需要括号来形成匹配组 0,因为它无论如何都会定位整个匹配对象。

字母'd'前面的左括号取字母'f'前面的最后一个右括号组成匹配组1。

字母 'e' 周围的括号定义匹配组 2。

import re

m = re.search('(?<=abc)(d(e))f', 'abcdef')

print(m.group(0))
print(m.group(1))
print(m.group(2))

打印出来:

def
de
e

【讨论】:

    【解决方案2】:

    group(0) 返回正则表达式匹配的完整字符串。只是abc 不是比赛的一部分。 (?&lt;=abc) 不匹配 abc - 它匹配 abc 前面紧接的字符串中的任何位置

    【讨论】:

      【解决方案3】:

      补充:

      运行这个:

      import re    
      m = re.search('text', 'my text')
      help(m.group)
      
      print(m.group(0) == m.group())
      
      # when in doubt, dir(m) helps too
      

      输出:

      Help on built-in function group:
      
      group(...) method of re.Match instance
          group([group1, ...]) -> str or tuple.
          Return subgroup(s) of the match by indices or names.
          For 0 returns the entire match.
      
      True
      

      【讨论】:

        猜你喜欢
        • 2017-03-21
        • 2021-12-16
        • 1970-01-01
        • 2011-07-10
        • 2023-04-06
        • 2017-05-02
        • 2010-10-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多