【问题标题】:python re ?: example [duplicate]python re?:示例[重复]
【发布时间】:2014-05-24 05:32:17
【问题描述】:

我在 python re 示例中看到了一个正则表达式 (?= (?:\d{5}|[A-Z]{2})) ,并且对 ?: 的含义感到非常困惑。

我还看到了 python 文档,有解释:

(?:...)

常规括号的非捕获版本。匹配括号内的任何正则表达式,但组匹配的子字符串在执行匹配后无法检索或稍后在模式中引用。

谁能给我一个例子,并解释它为什么有效,谢谢!!

【问题讨论】:

  • 你先检查文档了吗?
  • 当您不关心组的捕获时,这是一种对事物进行分组的方法。文档...总结得很好。

标签: python regex


【解决方案1】:

通常,括号会在您的正则表达式中创建一个“捕获”组:

regex = re.compile("(set|let) var = (\\w+|\\d+)")
print regex.match("set var = 12").groups()

结果

('set', '12')

稍后您可以通过对匹配结果调用 .groups() 方法来检索这些组。如您所见,括号内的任何内容都被捕获在“组”中。但你可能并不关心所有这些群体。假设您只想查找第二组而不是第一组中的内容。您需要第一组括号才能对“get”和“set”进行分组,但您可以通过在开头放置“?:”来关闭捕获:

regex = re.compile("(?:set|let) var = (\\w+|\\d+)")
print regex.match("set var = 12").groups()

结果:

('12',)

【讨论】:

  • 好的,非常感谢
【解决方案2】:

如果你不需要组来捕获它的匹配,你可以优化 将此正则表达式转换为 Set(?:Value)?。问号和 左括号后的冒号是创建 非捕获组。左括号后的问号是 与正则表达式末尾的问号无关。决赛 问号是使前一个标记的量词 可选的。这个量词不能出现在左括号之后, 因为在组的开始没有什么是可选的。 因此,问号作为 运算符使标记可选,问号作为 非捕获组的语法,即使这可能会令人困惑 第一的。还有其他类型的组使用 (? 语法 与解释的冒号以外的其他字符组合 在本教程的后面部分。

color=(?:red|green|blue) 是另一个具有非捕获组的正则表达式。 此正则表达式没有量词。

发件人:http://www.regular-expressions.info/brackets.html

另请阅读:What is a non-capturing group? What does a question mark followed by a colon (?:) mean?

【讨论】:

    猜你喜欢
    • 2012-09-08
    • 2020-03-26
    • 2011-11-21
    • 1970-01-01
    • 2017-11-17
    • 1970-01-01
    • 2013-04-03
    • 2011-11-19
    • 1970-01-01
    相关资源
    最近更新 更多