gpt4 book ai didi

regex - 正则表达式与 Swift 中元字符的大小写和变音符号不敏感匹配

转载 作者:搜寻专家 更新时间:2023-10-30 22:00:14 25 4
gpt4 key购买 nike

我正在尝试匹配用户输入中的粗鲁词语,例如“我恨你!”或“i.håté.Yoù”将与从 JSON 解析的单词数组中的“恨你”相匹配。

所以我需要它不区分大小写和变音符号,并将粗鲁单词中的空格视为任何非字母字符:正则表达式元字符 \P{L} 应该适用于此,或者至少 \W

现在我知道 [cd]NSPredicate 一起工作,就像这样:

 func matches(text: String) -> [String]? {
if let rudeWords = JSON?["words"] as? [String]{
return rudeWords.filter {
let pattern = $0.stringByReplacingOccurrencesOfString(" ", withString: "\\P{L}", options: .CaseInsensitiveSearch)
return NSPredicate(format: "SELF MATCHES[cd] %@", pattern).evaluateWithObject(text)
}
} else {
log.debug("error fetching rude words")
return nil
}
}

这对任何一个元字符都不起作用,我猜它们不会被 NSpredicate 解析,所以我尝试像这样使用 NSRegularExpression:

func matches(text: String) -> [String]? {
if let rudeWords = JSON?["words"] as? [String]{
return rudeWords.filter {
do {
let pattern = $0.stringByReplacingOccurrencesOfString(" ", withString: "\\P{L}", options: .CaseInsensitiveSearch)
let regex = try NSRegularExpression(pattern: pattern, options: .CaseInsensitive)
return regex.matchesInString(text, options: [], range: NSMakeRange(0, text.characters.count)).count > 0
}
catch _ {
log.debug("error parsing rude word regex")
return false
}
}
} else {
log.debug("error fetching rude words")
return nil
}
}

这似乎工作正常,但我不知道如何使正则表达式变音符号不敏感,所以我尝试了这个(以及其他解决方案,如重新编码)

let text = text.stringByFoldingWithOptions(.DiacriticInsensitiveSearch, locale: NSLocale.currentLocale())

但是,这对我不起作用,因为每次键入字符时我都会检查用户输入,所以我尝试去除重音的所有解决方案都使应用程序非常慢。

有人知道是否还有其他解决方案,或者我是否以错误的方式使用它?

谢谢

编辑

实际上我错了,导致应用变慢的原因是试图匹配 \P{L},我尝试使用 \W 和重音去除线,现在它可以正常工作,即使它匹配的字符串比我最初想要的少。

链接

这些可能会帮助一些人处理正则表达式和谓词:

最佳答案

朝不同的方向前进可能是值得的。如果您更改正则表达式,而不是展平输入,会怎样?

不是匹配hate.you,而是匹配[h][åæaàâä][t][ëèêeé].[y][o0][ùu] ,例如(无论如何,这都不是一个完整的列表)。即时执行此转换(而不是存储它)是最有意义的,因为如果您以后需要更改字符扩展的内容,这可能会更容易。

这将使您能够更好地控制要匹配的字符。如果你看,我有 0 作为匹配 o 的字符。没有多少 Unicode 强制可以让你做到这一点。

关于regex - 正则表达式与 Swift 中元字符的大小写和变音符号不敏感匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35017404/

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