Swift正则表达式将字符串拆分为长度为

时间:2018-04-07 01:35:16

标签: swift regex nsregularexpression

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

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

子字符串只会在空格上分割。

Ex:快速的棕色狐狸跳过懒狗应分成[“快速”,“棕色狐狸”,“跳过”,“懒惰”,“狗”等阵列

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

2 个答案:

答案 0 :(得分:4)

您可以使用"(.{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]
}

产量:

  

["快速","棕色狐狸","跳过","懒惰","狗&# 34]

与所有正则表达式的答案一样,有许多方法可以让猫皮肤变亮,但这似乎是一种简单的方法。

但是,这确实提出了如果遇到超过10个字符的单词该怎么办的问题。例如,如果您想要在不拆分的情况下允许这些长字,则可以使用"(.{1,10}|\\S{11,})(\\s+|$)"

答案 1 :(得分:0)

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"]