具有多个组的正则表达式无法捕获括号

时间:2018-04-17 18:38:54

标签: python regex

这是我的字符串示例: "此类别中的#31,456(类别前100名)"

我的任务是:

  1. 摆脱第一个#标签(确保句子以hashtag开头)
  2. 取主题标签后面的所有数字(数字之间可能有或不带分号)
  3. 取所有31,456位数字后的第一个括号内的文字。
  4. 用里面的文字去除括号。
  5. 我想出了正则表达式。

    (^\#)(\d+[,]?\d+)(.*)([\(+])
    

    预期结果:

    第2组 - 31,456

    第3组 - 此类别

    基本上我需要取第一个数字和后面的句子,分别分组。 只有当字符串包含括号时,此正则表达式才能完成工作。但有些情况下它并不包含,在这种情况下它根本不会采取任何措施。

    请传播一些光。如果重要的话,我正在使用python 3完成任务。

1 个答案:

答案 0 :(得分:2)

您可以使用

^#(\d+(?:,\d+)?)\s*([^(]*)

请参阅regex demo

<强>详情

  • ^ - 字符串开头
  • # - 哈希符号
  • (\d+(?:,\d+)?) - 第1组:一个或多个数字以及,后跟1+位数的可选序列
  • \s* - 1+空白字符
  • ([^(]*) - 第2组:除(
  • 以外的任何0 +字符

Python demo

import re
rx = r"^#(\d+(?:,\d+)?)\s*([^(]*)"
s = "#31,456 in this category (Top 100 of category)"
m = re.search(rx, s)
if m:
    print("Group 1: {}; Group 2: {}".format(m.group(1), m.group(2)))
# => Group 1: 31,456; Group 2: in this category