You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 21:12:12