如何获取名称中的所有中间名
How to get all middle names In a name
说,我有以下全名:
1) 惠特尼·拉贾坎亚·斯里瓦纳·乔文迪
2) 谢丽尔·汤普森·温斯顿
如何从上面各自的全名中检索中间名?
示例:
name(1)中有2个中间名,name(2)中有1个中间名
我使用了这段代码,但没有得到中间名。
var components = fullName.components(separatedBy: " ")
if(components.count > 0)
{
let firstName = components.removeFirst()
}
问题:
1) 如何获取一个名字中所有的中间名?有些名字有 1 个或多个(如上所示)。
谢谢
如果您将 "middle name" 定义为名称中除第一个和最后一个单词之外的所有内容,那么您可以按空格拆分字符串,dropFirst
和 dropLast
,然后加入结果.
var components = fullName.components(separatedBy: " ")
if (components.count <= 2) {
// no middle name
} else {
let middleName = components.dropFirst().dropLast().joined(separator: " ")
}
如果名称来自不同的语言环境并且您需要不同的方式来处理它们,您也可以使用 PersonNameComponentsFormatter
。
您可以定义贪婪的正则表达式并轻松获取中间名,例如:
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.
这可能是一个干净利落的解决方案。
注意:逻辑上不清楚是否应该过滤掉缩短的中间名,但你可以得到要点并且能够在您方便的时候扩展这个概念。
说,我有以下全名:
1) 惠特尼·拉贾坎亚·斯里瓦纳·乔文迪
2) 谢丽尔·汤普森·温斯顿
如何从上面各自的全名中检索中间名?
示例:
name(1)中有2个中间名,name(2)中有1个中间名
我使用了这段代码,但没有得到中间名。
var components = fullName.components(separatedBy: " ")
if(components.count > 0)
{
let firstName = components.removeFirst()
}
问题:
1) 如何获取一个名字中所有的中间名?有些名字有 1 个或多个(如上所示)。
谢谢
如果您将 "middle name" 定义为名称中除第一个和最后一个单词之外的所有内容,那么您可以按空格拆分字符串,dropFirst
和 dropLast
,然后加入结果.
var components = fullName.components(separatedBy: " ")
if (components.count <= 2) {
// no middle name
} else {
let middleName = components.dropFirst().dropLast().joined(separator: " ")
}
如果名称来自不同的语言环境并且您需要不同的方式来处理它们,您也可以使用 PersonNameComponentsFormatter
。
您可以定义贪婪的正则表达式并轻松获取中间名,例如:
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.
这可能是一个干净利落的解决方案。
注意:逻辑上不清楚是否应该过滤掉缩短的中间名,但你可以得到要点并且能够在您方便的时候扩展这个概念。