说,我有以下全名:
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个或多个(如上所示)。
谢谢
答案 0 :(得分:1)
如果您将“中间名”定义为名称中第一个和最后一个单词以外的所有内容,则可以用空格dropFirst
和dropLast
分割字符串,然后将结果加入。
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.
这可能是一个干净,时尚的解决方案。
注意:从逻辑上讲,不清楚是否应该过滤掉缩写的中间名,但是您可以根据要点进行扩展,并可以方便地扩展此概念。