我有一个输入字符串,看起来像这样:
HLI6Ch60000Ch500C0Ch46400Ch30000Ch21888Ch10E79CS07LCU3Ch37880Ch27800Ch16480CS8CA00000000000000000000
现在我不关心最后一个字母A
之后的部分,它总是A
和20个对我没有用处的数字。然而,我确实需要最后一个字母A
之前的部分,并且理想情况下,我需要将其分为两个不同的捕获组,就像这样:
1: HLI6Ch60000Ch500C0Ch46400Ch30000Ch21888Ch10E79CS07
2: LCU3Ch37880Ch27800Ch16480CS8C
唯一确定这些匹配项的方法是以字符
CS
结尾,后跟两个十六进制字符。我认为一个正则表达式,像(.+?CS.{2})+
(或者(.+?CS[[:xdigit:]]{2})+
)会做好工作,但是在www.regex101.com上尝试时,它只捕获最后一组,并给出以下警告:
注意: 重复捕获组只会捕获最后一次迭代。请在重复的组周围放置一个捕获组来捕获所有迭代,或者如果您不感兴趣数据,则改用非捕获组。我认为这意味着我应该使用类似
((.+?CS.{2})+)
的正则表达式,我是说-当然,现在我得到了两个捕获,但它们看起来像这样:1: HLI6Ch60000Ch500C0Ch46400Ch30000Ch21888Ch10E79CS07LCU3Ch37880Ch27800Ch16480CS8C
2: LCU3Ch37880Ch27800Ch16480CS8C
我的意思是第一个正则表达式稍微有点长了。如果有帮助的话,我应该指出最终的正则表达式将成为iOS应用程序的一部分,所以将使用NSRegularExpression
类的实例 - 不确定这是否是有用的信息,只是我知道NSRegularExpression
并不支持正则表达式世界的每个部分。
(.+?CS.{2})(.+?CS.{2})
,https://regex101.com/r/zD4cO2/1 - streetturtle