一尘不染

如何捕获多个重复的组?

swift

我需要捕获相同模式的多个组。假设我有以下字符串:

HELLO,THERE,WORLD

我写了以下模式

^(?:([A-Z]+),?)+$

我想做的是捕获每个单词,这样第1组是:“ HELLO”,第2组是“ THERE”,第3组是“ WORLD”我的正则表达式实际上只捕获了最后一个,即“世界”。

我正在这里测试我的正则表达式,我想与Swift一起使用它(也许Swift中有一种方法可以某种方式获取中间结果,以便我可以使用它们?)

更新:我不想使用split。现在,我只需要如何捕获与模式匹配的所有组,而不仅仅是最后一个。


阅读 220

收藏
2020-07-07

共1个答案

一尘不染

模式中只有一组,您只能在该组中获得一个准确的结果。如果您的捕获组被模式重复(您+在周围的非捕获组上使用了量词),则只会存储与其匹配的最后一个值。

您必须使用语言的正则表达式实现功能来 查找 模式的 所有匹配 项,然后必须删除非捕获组的锚点和量词(并且也可以省略非捕获组本身)。

或者,展开您的正则表达式,并让该模式在要获取结果的每个组中包含一个捕获组:

^([A-Z]+),([A-Z]+),([A-Z]+)$
2020-07-07