正则表达式用于查找字符串中出现的第一个大写字母

本文关键字:第一个 大写字母 用于 查找 字符串 正则表达式 | 更新日期: 2023-09-27 18:31:56

我想在字符串中找到第一个大写字母出现的索引。

例如 -

String x = "soHaM";

对于此字符串,索引应返回 2。正则表达式应在找到第一个大写字母后忽略所有其他大写字母。如果未找到大写字母,则应返回 0。请帮忙。

正则表达式用于查找字符串中出现的第一个大写字母

我很

确定您所需要的只是正则表达式A-Z 'p{Lu}

public static class Find
{
  // Apparently the regex below works for non-ASCII uppercase
  // characters (so, better than A-Z).
  static readonly Regex CapitalLetter = new Regex(@"'p{Lu}");
  public static int FirstCapitalLetter(string input)
  {
    Match match = CapitalLetter.Match(input);
    // I would go with -1 here, personally.
    return match.Success ? match.Index : 0;
  }
}

你试过这个吗?

只是为了好玩,一个 LINQ 解决方案:

string x = "soHaM";
var index = from ch in x.ToArray()
            where Char.IsUpper(ch)
            select x.IndexOf(ch);

这将返回IEnumerable<Int32> 。如果需要第一个大写字符的索引,只需调用 index.First() 或仅检索 LINQ 中的第一个实例:

string x = "soHaM";
var index = (from ch in x.ToArray()
            where Char.IsUpper(ch)
            select x.IndexOf(ch)).First();

编辑

正如注释中所建议的,这是另一个 LINQ 方法(可能比我最初的建议性能更高):

string x = "soHaM";
x.Select((c, index) => new { Char = c, Index = index }).First(c => Char.IsUpper(c.Char)).Index;

无需Regex

int firstUpper = -1;
for(int i = 0; i < x.Length; i++)
{
    if(Char.IsUpper(x[i]))
    {
        firstUpper = i;
        break;
    }
}

http://msdn.microsoft.com/en-us/library/system.char.isupper.aspx

为了完整起见,这是我的 LINQ 方法(尽管即使 OP 可以使用它,它也不是正确的工具):

int firstUpperCharIndex = -1;
var upperChars = x.Select((c, index) => new { Char = c, Index = index })
                  .Where(c => Char.IsUpper(c.Char));
if(upperChars.Any())
    firstUpperCharIndex = upperChars.First().Index;

首先你的逻辑失败,如果该方法在你的情况下返回 0,这意味着该列表中的第一个字符是大写的,所以我建议找不到 -1 meens,或者抛出异常。

无论如何,只需使用正则表达式,因为您可以并不总是最好的选择,而且它们通常非常慢且难以阅读,这使得 yoru 代码更难使用。

无论如何,这是我的贡献

    public static int FindFirstUpper(string text)
    {
        for (int i = 0; i < text.Length; i++)
            if (Char.IsUpper(text[i]))
                return i;
        return -1;
    }

使用 Linq:

using System.Linq;
string word = "soHaMH";
var capChars = word.Where(c => char.IsUpper(c)).Select(c => c);
char capChar = capChars.FirstOrDefault();
int index = word.IndexOf(capChar); 

使用 C#:

using System.Text.RegularExpressions;
string word = "soHaMH";
Match match= Regex.Match(word, "[A-Z]");
index = word.IndexOf(match.ToString());

使用循环

 int i = 0;
 for(i = 0; i < mystring.Length; i++)
 {
   if(Char.IsUpper(mystring, i))
    break;
 }

我是你应该看的值;