我有以下字符串:


-prefix <@141222969505480701>其中第二部分例如<@141222969505480701>可以无限次重复(仅数字会更改)。
-prefix 141222969505480701的行为应与上述相同。
-prefix 141222969505480701 <@141222969505480702>仍然可以永远重复一次。


最后一个应该具有包含141222969505480701141222969505480702的组。

所以一些信息:


数字链始终总为18,因此我在正则表达式中使用\ d {18}
我希望分组使用这些数字,以便以后使用。


我尝试了什么

首先,我尝试匹配示例字符串中的第一个。
-prefix(\s<@\d{18}>)\1*会匹配整个字符串,但是我想将数字本身放在自己的组中。同样,此方法仅匹配相同的部分,例如<@141222969505480701> <@141222969505480701> <@141222969505480701>会匹配,但是中间的任何其他数字都不匹配。

在我脑海中听起来合乎逻辑的

-prefix (\d{18})+,但仅与“数字部分”的第一个匹配。

当我在regex101上测试它时,它告诉我以下内容:


  重复的捕获组将仅捕获最后一次迭代。将捕获组放在重复组周围以捕获所有迭代,或者如果您对数据不感兴趣,则使用非捕获组。


我试图将正则表达式调整为以下-prefix ((\d{18})+),但结果相同。

最佳答案

在评论中@madreflection的帮助下,我提出了以下解决方案:

-prefix([\s]*(<@|)(?<digits>[0-9]{18})>?)+

这正是我需要的,甚至忽略了它们之间的空格。同样,使用match.Groups["digits"].Captures可以使整个故事变得容易得多。

07-24 09:38