【问题标题】:How do I pick a specific word out of a string with certain criteria?如何从具有特定条件的字符串中选择特定单词?
【发布时间】:2021-05-03 13:51:15
【问题描述】:

我希望能够找到以大写字母开头的特定长度(3 - 99 个字符)的单词。 例如,在下面的句子中(实际句子将由用户相应地编写和填写)

My name is John and i am 20 years old.

我希望选择“约翰”这个词,因为它符合所有标准。

到目前为止,这是我的代码:(我知道这很乱,抱歉我在这方面相对较新)

static void Main(string[] args)
{
    Console.Write("Name and age: ");
    string a = Console.ReadLine();
    string b = string.Empty;
    int val;

    for (int i = 0; i < a.Length; i++)
    {
        if (Char.IsDigit(a[i]))
            b += a[i];
    }

    if (b.Length > 0)
        val = int.Parse(b);

    string inputStr = a;
    string outputStr = String.Concat(inputStr.Where(x => Char.IsUpper(x)));

    Console.WriteLine("Your name is " + outputStr);
    Console.WriteLine("You are " + b + " years old");
    Console.ReadLine();
}

我正在尝试让程序告诉我:

Your name is John
You are 20 years old

我让程序告诉我年龄,但到目前为止,我只能让它给我大写字母(字符串中的任何位置)

【问题讨论】:

  • 好吧,它没有做什么?它在做什么?有什么错误吗?
  • 你的代码会变得非常不紧凑,因为你这样做。我建议您使用Regular Expressions (Regex Class)。您可以使用regexr 网站轻松创建正则表达式。希望这会有所帮助
  • 挑选一个由单个大写字母后跟任意数量的小写字母组成的单词很容易。解析英语足以阅读一段并让您的程序找出某人的姓名和年龄是一个更有趣的问题

标签: c# regex string


【解决方案1】:

您可以先将句子拆分成单词,然后选择以大写字母开头的单词(前提是它们之间用空格分隔)

      int minLength = 3;
      int maxLength = 99;
      string[] CapWords = inputStr.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries)
                                            .Where(x =>  char.IsUpper(x[0])&& x.Length>= minLength && x.Length <= maxLength)
                                            .ToArray<string>();

     string outputStr = CapWords[1];

实际上,只有当您的句子中的第一个单词以大写字母开头但不是名称,然后以大写字母开头的第二个单词是您要查找的名称时,它才会起作用。

【讨论】:

  • 也添加长度检查。
【解决方案2】:

这对于您想要做的事情可能有点过头了,但通常是 Regex(正则表达式) 是解析字符串的好方法:

using System.Text.RegularExpressions;

            string pattern = @"(?!^)\b[A-Z][a-z]{2,98}\b";
            string input = "My name is John and i am 20 years old.";
            string output = Regex.Match(input, pattern).Value;

Regexr 是创建这些的绝佳工具。

【讨论】:

  • 您的{3,98} 应该是{2,98}。你不会像现在这样选择三个字符的单词
  • @Flydog57 感谢您的发现,已修复;-)
猜你喜欢
  • 1970-01-01
  • 2015-06-22
  • 2016-07-08
  • 1970-01-01
  • 2014-07-03
  • 1970-01-01
  • 2016-10-13
相关资源
最近更新 更多