我有一些语言的多个字符串(英语、意大利语、阿拉伯语、法语......等)。我想查看该语言字母表以外的单词列表。
例如英语:
"thisŞĞstring" -> 返回 false
“正确的字符串格式”-> 返回 true
例如阿拉伯语:
"كلمةabc" -> 返回假
“كلمة” -> 返回真
我不想一一输入所有语言的字母表。有没有办法做我想做的事?
我有一些语言的多个字符串(英语、意大利语、阿拉伯语、法语......等)。我想查看该语言字母表以外的单词列表。
例如英语:
"thisŞĞstring" -> 返回 false
“正确的字符串格式”-> 返回 true
例如阿拉伯语:
"كلمةabc" -> 返回假
“كلمة” -> 返回真
我不想一一输入所有语言的字母表。有没有办法做我想做的事?
这不是您要查找的内容,但正则表达式能够找到不符合特定脚本的字母,例如:
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) こんにちは