如何在Swift中将字符串按空格及标点拆分为含标点元素的数组?
Swift 字符串按空格和指定标点拆分并保留标点元素
可以用正则表达式实现这个需求,既能拆分空格和指定标点,还能把标点单独作为数组元素保留,后续添加新标点也非常灵活。
实现代码
import Foundation func splitStringIntoWordsAndPunctuation(_ input: String) -> [String] { // 正则模式:匹配各类语言的字母序列,或者指定的标点符号 // 要添加新标点的话,直接在 [] 里追加即可,比如加逗号就改成 "[!?.,]" let pattern = "\\p{L}+|[!?.]" guard let regex = try? NSRegularExpression(pattern: pattern) else { return [] } let matches = regex.matches(in: input, range: NSRange(input.startIndex..., in: input)) return matches.compactMap { match in Range(match.range, in: input).map { String(input[$0]) } } } // 测试示例 let testStr = "When is your birthday?" let result = splitStringIntoWordsAndPunctuation(testStr) print(result) // 输出:["When", "is", "your", "birthday", "?"]
说明
- 正则里的
\\p{L}+用来匹配所有Unicode字母(支持中文、英文等各类语言文字),如果只需要匹配英文单词,可换成\\w+(匹配字母、数字、下划线)。 |[!?.]表示匹配单独的?、!、.,后续要添加其他标点(比如逗号、分号),直接把字符加到括号里即可,比如改成|[!?.,;]。- 空格会被自动忽略(因为不在匹配规则内),最终数组只会包含提取到的单词和指定标点。
内容的提问来源于stack exchange,提问作者Yuuu
相关产品推荐
相关产品推荐

