首页 > 解决方案 > 匹配前缀后由空格分隔的字符序列

问题描述

我有以下字符串:

  1. -prefix <@141222969505480701>第二部分例如<@141222969505480701>可以无限次重复(只有数字改变)。
  2. -prefix 141222969505480701其行为应与上述相同。
  3. -prefix 141222969505480701 <@141222969505480702>它仍然可以永远重复。

最后一个应该有包含141222969505480701和的组141222969505480702

所以一些信息:

我试过的

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

在我的脑海里听起来合乎逻辑的是什么

-prefix (\d{18})+但它只会匹配“数字部分”中的第一个。

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

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

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

标签: c#regex

解决方案


在评论中@madreflection 的帮助下,我想出了这个解决方案:

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

这正是我所需要的,甚至忽略了两者之间的空格。此外,使用match.Groups["digits"].Captures它使整个故事变得容易得多。


推荐阅读