代码之家  ›  专栏  ›  技术社区  ›  Falmarri

regex命名分组

  •  0
  • Falmarri  · 技术社区  · 14 年前

    您能在regex组中进行动态命名吗?有点像

    reg = re.compile(r"(?PText|Or|Something).*(?PTextIWant)")
    
    r = reg.find("TextintermingledwithTextIWant")
    
    r.groupdict()["Text"] == "TextIWant"
    

    因此,根据乞讨是什么,组[“文本”]==textiwant

    更新以使队列更清晰。

    3 回复  |  直到 14 年前
        1
  •  1
  •   Antal Spector-Zabusky    14 年前

    有些regex引擎支持这个,有些则不支持。 This site 说perl、python、pcre(以及php)和.net都支持它,它们的语法稍有不同:

    +--------+----------------------------+----------------------+------------------+
    | Engine |           Syntax           |    Backreference     |     Variable     |
    +--------+----------------------------+----------------------+------------------+
    | Perl   | (?<name>...), (?'name'...) | \k<name>, \k'name'   | %+{name}         |
    |        | (?P<name>...)              | \g{name}, (?&name)*  |                  |
    |        |                            | (?P>name)*           |                  |
    +--------+----------------------------+----------------------+------------------+
    | Python | (?P<name>...)              | (?P=name), \g<name>  | m.group('name')  |
    +--------+----------------------------+----------------------+------------------+
    | .NET   | (?<name>...), (?'name'...) | \k<name>, \k'name'   | m.Groups['name'] |
    +--------+----------------------------+----------------------+------------------+
    | PCRE   | (?<name>...), (?'name'...) | \k<name>, \k'name'   | Depends on host  |
    |        | (?P<name>...)              | \g{name}, \g<name>*  | language.        |
    |        |                            | \g'name'*, (?&name)* |                  |
    |        |                            | (?P>name)*           |                  |
    +--------+----------------------------+----------------------+------------------+
    

    这是 一份完整的清单,但我能找到。如果你知道更多的口味,就加进去!backreference表单 * 它们是“递归”的,而不仅仅是一个反向引用;我相信这意味着它们与 图案 再说一遍,不是什么 匹配 按模式。另外,我是通过阅读文档来达到这个目的的,但很可能会有错误,包括一些我从未使用过的语言和一些我从未使用过的功能。如果有什么问题请告诉我。

        2
  •  1
  •   ubiquibacon    14 年前

    你的问题用词有点滑稽,但我认为你要找的是一个不捕捉的群体。这样做:

    (?:Must_Match_This_First)What_You_Want(?:Must_Match_This_Last)

    这个 ?: 指定组匹配但不捕获的。

        3
  •  0
  •   npinti    14 年前

    您可以首先以动态方式构建字符串,然后将其传递给regex引擎。