Swift4 如何在一个名称中获得所有中间名称

Swift4 如何在一个名称中获得所有中间名称,swift4,Swift4,比如说,我有以下全名: 1) 惠特尼·拉贾卡尼亚·西里凡纳·吉奥文迪 2) 谢丽尔·汤普森·温斯顿 如何从上述各自的全名中检索中间名? 示例: 名称(1)中有两个中间名,名称(2)中有一个中间名 我使用了此代码,但没有得到中间名。 var components = fullName.components(separatedBy: " ") if(components.count > 0) { let firstName = components.removeFirst() } 问

比如说,我有以下全名:

1) 惠特尼·拉贾卡尼亚·西里凡纳·吉奥文迪

2) 谢丽尔·汤普森·温斯顿

如何从上述各自的全名中检索中间名?

示例:
名称(1)中有两个中间名,名称(2)中有一个中间名

我使用了此代码,但没有得到中间名。

var components = fullName.components(separatedBy: " ")
if(components.count > 0)
{
    let firstName = components.removeFirst()
}
问题

1) 如何在一个名称中获得所有中间名称?有些名称有1个或多个(如上图所示)

谢谢

如果将“中间名”定义为名称中除第一个和最后一个单词以外的所有内容,则可以将字符串按空格拆分,
dropFirst
dropLast
,然后加入结果

var components = fullName.components(separatedBy: " ")

if (components.count <= 2) {
    // no middle name
} else {
    let middleName = components.dropFirst().dropLast().joined(separator: " ")
}
var components=fullName.components(分隔符:“”)

如果(components.count您可以定义贪婪的reg exp并轻松获取中间名,如:

let namesArray = ["Whitney Rajakanya SiriVana Giovendi", "Cheryl Thompson Winston", "James T. Kirk", "Jean-Luc Picard", "J. Archer"]

if let regExp = try? NSRegularExpression(pattern: " (.*) ", options: .caseInsensitive) {

    namesArray.forEach { (name) in
        regExp.matches(in: name, options: .reportProgress, range: NSRange(location: 0, length: name.count)).forEach({ (textCheckingResult) in
            guard textCheckingResult.numberOfRanges > 1 else { return }
            let middleNames = (name as NSString).substring(with: textCheckingResult.range(at: 1))
            debugPrint("\(middleNames)")
        })
    }
}
然后您可以看到打印出来的中间名称,如:

Rajakanya SiriVana
Thompson
T.
这可能是一个干净整洁的解决方案



注意:从逻辑上讲,不清楚是否应该过滤掉缩短的中间名,但您可以了解要点,并可以在方便的情况下扩展此概念。

推断全名有点痛苦,而且通常容易出错(前缀和后缀也可能很多),也就是说。如果你可以从逻辑上说数组中的第一个字是名字,数组中的最后一个字是姓,那么其他所有的都是中间名。@Brett Caswell,我需要一个灵活的func,可以处理长全名,拆分全名后可以是3个字或4个字或更长。如果有人我知道第一个和最后一个,但是当全名有1个或2个或更多的中间名时如何处理?假设名称可以在空格处分开是危险的,如果不是完全错误的话。运行此代码时似乎没有输出。我得到错误:使用未解析的标识符middleName@MilkBottle你说得对。如果你想看t中间名作为输出,在
else
分支中添加一个
print
middleName
仅在
else
分支的范围内。middleName是从全名中提取的,其中空格用作分隔符,如我的示例。您的全名如James T.Kirk将是James T Kirt,不带句号。您能告诉我如何使用它吗更改regExp,一次只处理一个全名,而不处理数组中的名称。Thanks@MilkBottle,您不需要任何特殊的知识来进行任何更改–移除阵列或点是相当简单的任务,从根本上不会改变任何概念,我相信您可以轻松地修改这些内容并使其生效立即满足您的要求:)