Swift 快速字符串和[字符]

Swift 快速字符串和[字符],swift,string,indexing,character,Swift,String,Indexing,Character,我有以下代码: let txt = "over 100MB+ of text..." let tokenizedText = Array (txt) let regex = try NSRegularExpression (pattern: "(?s)<tu>.*?</tu>") let r = regex.matches (in: txt, range: NSRange (txt.startIndex..<txt.endIn

我有以下代码:

let txt = "over 100MB+ of text..."
let tokenizedText = Array (txt)
let regex = try NSRegularExpression (pattern: "(?s)<tu>.*?</tu>")
let r = regex.matches (in: txt, range: NSRange (txt.startIndex..<txt.endIndex, in: txt))
for match in r {
    let befOfMatch = match.range.lowerBound
    let endOfMatch = match.range.lowerBound + match.range.length
    // check the result
    if tokenizedText[begOfMatch] != "<" {
        print ("error") // from time to time!!!!
    }
}
let txt=“超过100MB+的文本…”
让tokenizedText=数组(txt)
让regex=try NSRegularExpression(模式:“(?)。*?”)
让r=regex.matches(in:txt,range:NSRange(txt.startIndex..regex.matches)生成不总是与字符数组同步的整数范围。
我知道UTF8在字节和字符之间没有一对一的对应关系,但是如何同步字符串和[字符]?我需要:

--将匹配序列中的字符序列检索为[字符]

--在缓冲区(字符串)中的每个匹配序列周围插入标记(例如…)


如何执行此操作?

问题在于NSRange它基于UTF16,因此生成的NSRange的位置不一定与字符数组中的字符位置相同(并非每个字符都可以用单个字节表示)。您需要将生成的NSRange转换为Range,并使用字符串范围的下限来检查原始字符串:

let txt = "over 100MB+ of text... <tu>whatever</tu>"
let tokenizedText = Array (txt)
let regex = try NSRegularExpression (pattern: "(?s)<tu>.*?</tu>")
let r = regex.matches (in: txt, range: NSRange (txt.startIndex..<txt.endIndex, in: txt))
for match in r {
    if let range = Range(match.range, in: txt) {
        print (txt[range])
        if txt[range.lowerBound] == "<" {
            print(true)
        } else {
            print(false)
        }
    }
}
let txt=“超过100MB+的文本…随便什么”
让tokenizedText=数组(txt)
让regex=try NSRegularExpression(模式:“(?)。*?”)

让r=regex.matches(in:txt,range:NSRange(txt.startIndex.)包含一个可复制的示例吗?谢谢Leo,但是(1)我所有的解析器都运行在以[Character]表示的文本上……从txt和range中,我如何计算tokenizedText中相应的整数索引?(2)反过来,是否有O(1)如何从tokenizedText中的整数索引计算txt中的索引?请注意,索引(u:offsetBy:)是O(n),而不是O(1)。。。