【问题标题】:Swift regular expression split string into array of substring with lengthSwift正则表达式将字符串拆分为具有长度的子字符串数组
【发布时间】:2018-09-17 01:56:52
【问题描述】:

如何将输入字符串拆分成字符串数组?

子字符串将小于或等于一个恒定长度(例如:总共 10 个字符。)

子字符串只会在空白处被分割。

例如:敏捷的棕色狐狸跳过懒惰的狗 应该拆分成数组 ["The quick","brown fox","jumps over","the lazy", "dog"]

=> 数组中的每个项目小于或等于 10 个字符并用空格分隔。

【问题讨论】:

  • 您忘记添加到目前为止编写的代码。
  • 我尝试了一些,但没有成功。
  • 尼克,它可能没有奏效,但无论如何,你真的应该分享你的尝试。它表明了您的真诚努力。它还向我们建议您已经就该主题进行了哪些研究。

标签: swift regex nsregularexpression


【解决方案1】:

您可以使用"(.{1,10})(\\s+|$)",匹配 1 到 10 个字符,以空格或行尾结尾。

let string = "The quick brown fox jumps over the lazy dog"
let regex = try! NSRegularExpression(pattern: "(.{1,10})(\\s+|$)")
let range = NSRange(string.startIndex..., in: string)
let results = regex.matches(in: string, options: .anchored, range: range)
    .map { match -> Substring in
        let range = Range(match.range(at: 1), in: string)!
        return string[range]
}

产量:

[“快速”、“棕狐”、“跳过”、“懒惰”、“狗”]

与所有正则表达式答案一样,有很多方法可以给猫剥皮,但这似乎是一种简单的方法。

不过,这确实会引发一个问题,即如果遇到超过 10 个字符的单词该怎么办。例如,如果您希望允许这些长词不拆分,则可以使用"(.{1,10}|\\S{11,})(\\s+|$)"

【讨论】:

    【解决方案2】:
    import Foundation
    
    var foxOverDog = "The quick brown fox jumps over the lazy dog".components(separatedBy: " ")
    
    var foxOverDogFitted = foxOverDog.reduce(into: [""]) {
        if $0[$0.endIndex - 1].count + $1.count <= 10 {
            let separator: String = $0[$0.endIndex - 1].count > 0 ? " " : ""
            $0[$0.endIndex - 1] += separator + $1
        } else {
            $0.append($1)
        }
    }
    print(foxOverDogFitted) // ["The quick", "brown fox", "jumps over", "the lazy", "dog"]
    

    【讨论】:

    • 感谢您的帮助,但我正在寻找正则表达式解决方案。
    猜你喜欢
    • 1970-01-01
    • 2016-12-03
    • 1970-01-01
    • 1970-01-01
    • 2014-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-13
    相关资源
    最近更新 更多