如何使用C#从名称中删除姓名缩写

时间:2018-12-11 03:24:23

标签: c# regex validation

我需要从名称中删除首字母,例如,

K A M Paul Silvester ->预期输出: Paul Silvester

我已经找到了使用java进行操作的解决方案,但是我需要使用C#进行操作

public static void main(String args[])
{
    String input = "K A M Paul Silvester";
    input = input.replaceAll("\\b[A-Z]+(?:\\.|\\s+|$)", "").trim();
    System.out.println(input);
}

我还需要检查输入名称是否有效,如果带有缩写的用户输入名称应返回false,否则返回true。我该怎么办

public bool checkName(string name)
{

}

3 个答案:

答案 0 :(得分:1)

我认为您需要一个正则表达式才能找到缩写和全名,如果可以的话,我建议您使用这样的正则表达式:

var match = Regex.Match(input, @"(?<initials>([A-Z] )+)?(?<name>.+)");
if (match.Success)
{
    var initials = match.Groups["initials"].Value;
    var name = match.Groups["name"].Value;

    var hasNotInitials = string.IsNullOrWhiteSpace(initials);
}

C# Demo I
C# Demo II

答案 1 :(得分:0)

正如我在评论中已经提到的那样,这是一个棘手的问题,因为姓名缩写中的字母数量可能因名称而异。您可以做一些可能在大多数时间都有效的事情。

不需要正则表达式。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace test
{
    class Program
    {
        static void Main(string[] args)
        {
            String input = "K A M Paul Silvester";
            String[] nameaArr = input.Split(' ');
            String firstName = nameaArr[nameaArr.Length - 2];
            String secondName = nameaArr[nameaArr.Length - 1];

            String name = firstName + " " + secondName;
            Console.WriteLine(name);
            Console.ReadKey();
        }
    }
}

我在这里使用 C#是因为您在问题中标记了 C#。如果您使用的是 Java ,则可以执行相同的操作

  

警告!
  如果用户输入带有以下内容的名称,则结果可能是错误的   名称后的缩写。例如:Paul Silvester K A M

答案 2 :(得分:0)

(.\b)*(.*) Group 2 will have the rest after the initials.  

K A M Paul Silvester-> K A M(Paul Silvester)

K A Paul-> K A(Paul)

对不起,我不使用C#,所以也许您必须使用两次摘录?