如何获得名称中的所有中间名

时间:2019-02-14 09:46:01

标签: swift4

说,我有以下全名:

1)惠特尼(Whitney Rajakanya)SiriVana Giovendi

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

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

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

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

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

问题

1)如何获得名称中的所有中间名?有些名称具有1个或多个(如上所示)。

谢谢

2 个答案:

答案 0 :(得分:1)

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

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

if (components.count <= 2) {
    // no middle name
} else {
    let middleName = components.dropFirst().dropLast().joined(separator: " ")
}

如果名称来自不同的区域,并且您需要使用不同的方式处理它们,那么您也可以使用PersonNameComponentsFormatter

答案 1 :(得分:0)

您可以定义一个贪婪的正则表达式并轻松获得中间名,例如:

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.

这可能是一个干净,时尚的解决方案。


注意:从逻辑上讲,不清楚是否应该过滤掉缩写的中间名,但是您可以根据要点进行扩展,并可以方便地扩展此概念。