当前位置: 首页 > 知识库问答 >
问题:

使用swift查找任何语言中的非字母单词

那弘
2023-03-14

我有一些语言(英语、意大利语、阿拉伯语、法语等)的多个字符串。我想看一个单词列表,而不是那种语言的字母表。

例如,对于英语:

“这根绳子”-

"corect字符串格式"-

例如,阿拉伯语:

"在这里"-

"كلمة" -

我不想一个接一个地输入所有语言的字母表。有办法做我想做的吗?

共有1个答案

程凯定
2023-03-14

这并不完全是您想要的,但regex能够找到不符合特定脚本的字母,例如:

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{信}--\p{cript=arabic}]与"载波",它将返回"abc"。

同样,可能不是您想要的,但您可以使用NaturalLanguageframework来解析文本:

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) こんにちは

或者如果您使用。脚本枚举标记中

NLTag(_rawValue: Latn) he
NLTag(_rawValue: Latn) said
NLTag(_rawValue: Jpan) こんにちは
 类似资料:
  • 在测试PHP正则表达式引擎时,我发现它只将<code>[0-9A-Za-z_][\w]匹配为单词字符。是否有任何PHP或Perl正则表达式转义序列可以匹配任何语言中的字母?我可以为我希望使用的每个字母表添加范围,但用户总是会用意想不到的语言给我们带来惊喜! 请注意,这不是为了安全过滤,而是为了标记文本。

  • 问题内容: 我想计算以下字符串中的字母,数字和特殊字符的数量: 我试过了: 但我遇到了错误。我对此尝试了各种其他变化-仍然出现错误-如: 找不到’<=’的重载,该重载接受提供的参数 问题答案: Swift 3更新: (以前的Swift版本的答案) 一个可能的Swift解决方案: 更新: 上述解决方案仅适用于ASCII字符集中的字符,即不能将Ä,é或ø识别为字母。Foundation框架使用以下替代

  • 问题内容: 什么是最好的纯Python实现,以检查字符串是否包含字母表中的任何字母? 哪里会因为没有字母而返回,而会因为有了字母而返回。 问题答案: 正则表达式应该是一种快速的方法:

  • 问题内容: 实际上,几周前有人问我自己,而我确切地知道如何使用SP或UDF来执行此操作,但是我想知道是否有没有这些方法的快速简便的方法。我假设有,但我找不到。 我需要说明的一点是,尽管我们知道允许使用哪些字符(az,AZ,0-9),但我们 不想指定 不允许使用的字符(#@!$等…)。另外,我们希望拉出 包含 非法字符的行,以便可以将其列出给用户修复(由于我们无法控制输入过程,因此此时无法执行任何操

  • 问题内容: 我正在开发的游戏目前需要让人们以自己的名字参加高分榜。我对如何处理按键有些陌生,但是我只在寻找特定按键。是否有一种简单的方法可以使按下任何键的字母而无需执行以下操作: 尽管这行得通,但我觉得有一种更有效的解决方法。我只是无法弄清楚或找到任何指导。 问题答案: 基本上有两种方法: 选项1: 使用。 就这么简单 使用的好处是,仅当0的值介于255和255之间(包括0和255)时,该方法才有

  • 我需要制作一个程序,通过用户的输入来计算单词、句子和字母的数量。在我给出的输入是多行的之前,这个程序工作得很好。如果输入长度超过终端窗口中可容纳的文本长度,程序将开始忽略所有句号/问号/感叹号。我不知道为什么,我需要一些帮助。如果文本可以放在终端窗口的一行中,则不会发生这种情况。我还打印了程序读取的每个字符,但这也忽略了所有的句号/问号/感叹号。这些字符都不会被打印出来。为了澄清,一个句子只是句号