0

我有一些语言的多个字符串(英语、意大利语、阿拉伯语、法语......等)。我想查看该语言字母表以外的单词列表。

例如英语:

"thisŞĞstring" -> 返回 false

“正确的字符串格式”-> 返回 true

例如阿拉伯语:

"كلمةabc" -> 返回假

“كلمة” -> 返回真

我不想一一输入所有语言的字母表。有没有办法做我想做的事?

4

1 回答 1

1

这不是您要查找的内容,但正则表达式能够找到不符合特定脚本的字母,例如:

let string = "he said こんにちは"
let regex = try NSRegularExpression(pattern: #"[\p{Letter}--\p{script=latin}]+"#)
if 
    let match = regex.firstMatch(in: string, options: [], range: NSRange(string.startIndex..., in: string)), 
    let range = Range(match.range, in: string) 
{
    print(string[range])  // こんにちは
}

或者如果你使用[\p{Letter}--\p{script=arabic}]+“كلمةabc”,它会返回“abc”。


同样,可能不是您要查找的内容,但您可以使用NaturalLanguage框架来解析文本:

import NaturalLanguage

let text = "he said こんにちは"

let tagger = NLTagger(tagSchemes: [.language, .script])
tagger.string = text
let range = text.startIndex..<text.endIndex
let options: NLTagger.Options = [.omitWhitespace, .joinContractions]
tagger.enumerateTags(in: range, unit: .word, scheme: .language, options: options) { tag, range in
    guard let tag = tag else { return true }
    
    print(tag, String(text[range]))
    return true
}

返回:

NLTag(_rawValue: en) he
NLTag(_rawValue: en) said
NLTag(_rawValue: ja) こんにちは

或者,如果您.script使用enumerateTags

NLTag(_rawValue: Latn) he
NLTag(_rawValue: Latn) said
NLTag(_rawValue: Jpan) こんにちは
于 2021-10-03T15:45:15.453 回答