【问题标题】:How do I split a list of names (with title and surname) where they are only separated by a space?如何拆分仅由空格分隔的名称列表(带有标题和姓氏)?
【发布时间】:2011-12-11 15:54:06
【问题描述】:

我有一个文本块,我需要将其与其中包含的标题和姓氏列表分开。它们都是用空格分隔的,根本没有回车。

例如:

史密斯先生 约翰逊先生 约翰逊夫人 史密斯女士 等等等等

我需要将它们分解成单独的名称,以便我有类似以下的内容

[0] = 史密斯先生
[1] = 约翰逊先生
[2] = 约翰逊夫人
[3] = 史密斯女士

任何帮助将不胜感激。

我正在使用 .NET 框架 C#(以防万一它对某人有用)。

【问题讨论】:

  • 这不是保存数据的好格式。医生、骑士、领主、神职人员、外国人等呢?
  • @Kobi:多年来看到人名的巨大复杂性,我怀疑正确的方法是使用 XML 混合内容内容模型来标记具有各个部分语义的全名,允许根据目标形式级别省略位。这是一种非常复杂的方法!但我认为这可能是实际正常工作的最低要求。当然,没有人这样做,所以肯定有很多糟糕的代码......

标签: c# regex string split


【解决方案1】:

我会试试的

var result = Regex.Split(input, @" (?=Mr\b|Mrs\b|Ms\b)", RegexOptions.None);

如果每个头衔确实是“先生”、“夫人”或“女士”之一。这种方法允许相当多的不寻常的姓氏,但需要提前知道每个标题。在ideone.com查看它的实际应用

【讨论】:

  • 不错;如果标题列表足够全面,这将处理一些真正棘手的情况。
【解决方案2】:

使用下面的

string[] parts =
  Regex.Matches(myarray[0], "([^\s]*\s[^\s]*)(?:\s |$)")
  .Cast<Match>()
  .Select(m => m.Groups[1].Value)
  .ToArray();

【讨论】:

  • 我有一个同事,他的姓是两个字,即使没有头衔。真实世界的数据很糟糕!
  • 我不会提及我同事的名字——这对他们来说并不公平——但考虑一下Graf von Zeppelin,它符合标题+姓氏的模式。 (奖励:格拉夫是一个早已逝去的历史人物,不会抱怨成为榜样。)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-12-22
  • 2015-12-21
  • 1970-01-01
  • 2014-08-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多