regex - 如何使用正则表达式将字符串拆分为相同字符的组?

标签 regex swift string

我得到了这样一个字符串:

var string = "AAAAAAABBBCCCCCCDD"

并喜欢将字符串拆分成这种格式的数组(相同的字符 --> 相同的组)使用正则表达式:

Array: "AAAAAAA", "BBB", "CCCCCC", "DD"

这是我到目前为止得到的,但我无法真正让它工作。


var array = [String]()
var string = "AAAAAAABBBCCCCCCDD"
let pattern = "\\ b([1,][a-z])\\" // mistake?!
let regex = try! NSRegularExpression(pattern: pattern, options: [])

array = regex.matchesInString(string, options: [], range: NSRange(location: 0, length: string.count))

最佳答案

您可以使用此 answer 中的函数实现该目的:

func matches(for regex: String, in text: String) -> [String] {

    do {
        let regex = try NSRegularExpression(pattern: regex)
        let results = regex.matches(in: text,
                                    range: NSRange(text.startIndex..., in: text))
        return results.map {
            String(text[Range($0.range, in: text)!])
        }
    } catch let error {
        print("invalid regex: \(error.localizedDescription)")
        return []
    }
}

(.)\\1+ 作为 regex 传递,将 AAAAAAABBBCCCCCCDD 作为 text 传递,如下所示:

let result = matches(for: "(.)\\1+", in: "AAAAAAABBBCCCCCCDD")
print(result) // ["AAAAAAA", "BBB", "CCCCCC", "DD"]

关于regex - 如何使用正则表达式将字符串拆分为相同字符的组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48137343/

相关文章:

javascript - 是否可以更改 vi 正则表达式机器?

java - 从文本中删除文件路径

ios - viewDidDisappear 永远不会在自定义选项卡中被调用

java - 为什么引用 String str1 = str + "test "与 String str3 = "checktest"不同

Java根据utf-8编码索引查找字符串的索引

c++ - 在 C++03 中将字符串转换为 int

regex - 如何在 LEX/FLEX 中编写非贪婪匹配?

c++ - 你能搜索或过滤 Vim 补全吗?

json - 如何使用 Alamofire 从本地主机的 API 获取 JSON | swift

ios - 当我们在 swift iOS 的 UIWebView 上有一些内容时,如何获得正确的高度?