【问题标题】:Regex and the OR operator without grouping in Python?没有在 Python 中分组的正则表达式和 OR 运算符?
【发布时间】:2012-12-07 13:10:36
【问题描述】:

以下是案例。我正在日志文件中寻找以下模式。

所有字符串的格式为AB_NCDE_NABCDE 是固定字母,后跟下划线。 N 可以是 2 个或 3 个数字。

我尝试了(AB|CDE)_\d{2,3},但它返回了一个组。我做不到\w{2,3}\d{2,3},因为它必须是ABCDE 而不是ACFEG。省略括号也会中断。我确信解决方案很简单,但我是 python 和正则表达式的新手,无法弄清楚。

【问题讨论】:

  • 你可以把整个东西包成一个组:((AB|CDE)_\d{2,3}),第一组是AB_123,第二组就是AB

标签: python regex regex-group


【解决方案1】:

正则表达式括号内的?: 使其无法捕获。像这样:(?:AB|CDE)_\d{2,3}

在此处查看文档:http://docs.python.org/3/library/re.html 大约三分之一的方法是通过非捕获语法。

【讨论】:

    【解决方案2】:

    非捕获组语法为(?:...)(?:AB|CDE)_\d{2,3} 也是如此。这是documented 以及其他所有内容。

    【讨论】:

    • 糟糕,一个错字。但看起来你也做了一个,因为它应该是(?:AB|CDE)
    • 我可以做类似(?:abc|def|ghi|xyz)的事情吗?
    • @qed - 是的,你可以做任何你在常规括号中会做的事情。 ?: 只是告诉正则表达式不要将这些括号视为捕获组。
    猜你喜欢
    • 1970-01-01
    • 2013-11-18
    • 2012-10-30
    • 2023-03-10
    • 2011-01-03
    • 1970-01-01
    • 2014-05-01
    • 1970-01-01
    相关资源
    最近更新 更多