c# - 匹配前缀后由空格分隔的字符序列
问题描述
我有以下字符串:
-prefix <@141222969505480701>
第二部分例如<@141222969505480701>
可以无限次重复(只有数字改变)。-prefix 141222969505480701
其行为应与上述相同。-prefix 141222969505480701 <@141222969505480702>
它仍然可以永远重复。
最后一个应该有包含141222969505480701
和的组141222969505480702
。
所以一些信息:
- 数字链总共总是 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
它使整个故事变得容易得多。
推荐阅读
- excel - Excel - 如果值 x 在列的数组部分中,如何返回
- git - gitkraken repo 上的“找不到兼容的存储库”错误
- c# - 远程机器上的 Sql 数据库备份
- android - Android 资源链接失败错误:资源样式/CardView 错误:链接引用失败
- swift4 - 有没有办法改变文本图层与具有相同颜色的图层相交处的颜色,以使相交处可见?
- c# - 从 ASP.NET Core 路由中获取无限数量的字符串参数
- php - 无需登录即可连接第二个“静态”Azure office365 帐户的正确方法是什么(已提供凭据)?
- dart - 如何区分代码中颤振中的调试和发布模式?
- javascript - Vb.Net WebBrowser 点击(tablo inside)按钮
- postgresql - 查找 Postgres 过程的用法