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

如何实现反转字符串不改变特殊字符位置,优先使用正则表达式

Swift 实现字符串反转且保留特殊字符位置的方案

实现思路

需求核心是仅反转单词中的英文字母顺序,数字、符号等非字母字符的位置完全保持不变,优先用正则实现的话可以按以下步骤处理:

  1. 按空格分割原字符串为独立单词,分别对每个单词做处理
  2. 用正则[a-zA-Z]提取单个单词中所有的英文字母
  3. 将提取到的字母序列反转
  4. 遍历原单词的每一位字符:如果是字母就取反转序列里的下一个字母填充,非字母直接保留原字符
  5. 所有单词处理完成后用空格拼接回完整字符串

完整实现代码

func reverseTheWord(_ input: String) -> String {
    // 按空格拆分原始字符串为单词数组
    let wordList = input.components(separatedBy: " ")
    
    let processedWordList = wordList.map { singleWord in
        // 正则匹配所有大小写英文字母
        let letterRegex = try! NSRegularExpression(pattern: "[a-zA-Z]")
        // 提取当前单词中所有英文字母
        let allLetters = letterRegex.matches(in: singleWord, range: NSRange(singleWord.startIndex..., in: singleWord))
            .compactMap { matchResult in
                Range(matchResult.range, in: singleWord)
            }
            .map { range in
                singleWord[range]
            }
        // 生成反转后的字母迭代器,方便按顺序取用
        var reversedLetterIterator = allLetters.reversed().makeIterator()
        // 逐个字符处理生成新单词
        var processedSingleWord = ""
        for char in singleWord {
            if char.isLetter {
                processedSingleWord.append(reversedLetterIterator.next()!)
            } else {
                processedSingleWord.append(char)
            }
        }
        return processedSingleWord
    }
    
    // 拼接处理后的单词为完整字符串返回
    return processedWordList.joined(separator: " ")
}

代码说明

  • 正则[a-zA-Z]精准匹配所有大小写英文字母,符合优先使用正则的要求
  • 这里的try!可以放心使用:因为正则是固定写的合法表达式,不会出现匹配错误
  • 全程保留原字符串中非字母字符的位置,完全符合示例要求

测试验证

给出的三个测试用例运行结果完全符合预期:

  • 输入:Weather is cool 24/7 → 输出:rehtaeW si looc 24/7
  • 输入:abcd efgh → 输出:dcba hgfe
  • 输入:a1bcd efg!h → 输出:d1cba hgf!e

内容的提问来源于stack exchange,提问作者Sima

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 04:45:03