gpt4 book ai didi

regex - NSRegularExpression 异常,字符串包含重音符号 "é"字符

转载 作者:行者123 更新时间:2023-11-28 08:57:51 24 4
gpt4 key购买 nike

我正在使用 NSRegularExpression 的 stringByReplacingMatchesInString 方法将输入字符串分成多个部分,以便我可以重新排列它们。在我针对包含重音“é”的字符串对其进行测试之前,它一直运行良好。

这是一个演示问题的 XCode playground。在这个缩减示例中(它不是很“真实世界”,但它确实证明了问题),我匹配所有内容,然后使用简单地重复这些匹配的模板创建一个新字符串:“$1 - $1”。

import Cocoa

var err: NSError?
var regex = NSRegularExpression(pattern: "^(.*?)$", options: nil, error: &err)

let test = "homér simpson"
let r = NSMakeRange(0, count(test))

var str = regex!.stringByReplacingMatchesInString(test, options: nil, range: r, withTemplate: "$1 - $1")

字符串“str”最终变成了“homér simpso - homér simpson”。如您所见,$1 的第一个实例被截断了 1 个字符,我发现这是因为重音符号“é”。如果您将其编辑为使用普通的“e”,就可以了。

但奇怪的是。如果您再次编辑它以将带重音符号的“é”放回字符串中,它的行为就像它应该的那样并且不会被截断。

我倾向于怀疑传递给该方法的范围,但我认为 count() 足够聪明以处理 unicode 字符的存在?

最佳答案

我想我已经通过使用这个范围解决了这个问题:

let r = NSMakeRange(0, count(test.utf16))

不完全确定为什么需要 utf16,但我无法反驳结果。

关于regex - NSRegularExpression 异常,字符串包含重音符号 "é"字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32620934/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com