Swift macOS开发中如何从主字符串分离指定次级子字符串
问题原因
你当前使用的正则表达式a(.*),中的.*属于贪婪匹配规则,会尽可能多的匹配字符,直到命中整个字符串末尾最后一个逗号,所以最终捕获到的内容是a之后到最后一个逗号之间的所有字符,也就是你得到的bc,d,e,f。
解决方案
有两种常用的修改方式,都可以精准匹配到第一个逗号就停止,拿到bc:
方案1:使用非贪婪匹配
在量词*后加?开启非贪婪模式,匹配到第一个符合要求的逗号就终止:
let tokenx = "123 abc,d,e,f," // 仅修改正则pattern即可 let regex = try NSRegularExpression(pattern: "a(.*?),") let matches = regex.matches(in: tokenx, range: NSRange(tokenx.startIndex..., in: tokenx)) for match in matches { let swiftRange = Range(match.range(at: 1), in: tokenx)! print(tokenx[swiftRange]) // 输出bc }
方案2:使用排除型字符集(更推荐,匹配效率更高)
直接限定匹配的内容不能包含逗号,遇到逗号就自动停止匹配,不需要回溯:
let tokenx = "123 abc,d,e,f," // 仅修改正则pattern即可 let regex = try NSRegularExpression(pattern: "a([^,]*),") let matches = regex.matches(in: tokenx, range: NSRange(tokenx.startIndex..., in: tokenx)) for match in matches { let swiftRange = Range(match.range(at: 1), in: tokenx)! print(tokenx[swiftRange]) // 输出bc }
内容的提问来源于stack exchange,提问作者Kênh Vui Để Học
相关产品推荐
相关产品推荐

