首页 > 解决方案 > 如何在 C# 中使用正则表达式大写第一个字母(忽略非 az)?

问题描述

有很多关于如何使用 C# 将第一个字母大写的帖子,但是当我忽略其中的前缀非字母字符和标签时,我特别在努力如何做到这一点。例如,

<style=blah>capitalize the word, 'capitalize'</style>

如何忽略潜在的<> 标签(或之前的非字母字符,如星号*)及其中的内容,然后将“大写”大写?

我试过:

public static string CapitalizeFirstCharToUpperRegex(string str)
{
    // Check for empty string.  
    if (string.IsNullOrEmpty(str))
        return string.Empty;

    // Return char and concat substring. 
    // Start @ first char, no matter what (avoid <tags>, etc)
    string pattern = @"(^.*?)([a-z])(.+)";

    // Extract middle, then upper 1st char
    string middleUpperFirst = Regex.Replace(str, pattern, "$2");
    middleUpperFirst = CapitalizeFirstCharToUpper(str); // Works

    // Inject the middle back in
    string final = $"$1{middleUpperFirst}$3";
    return Regex.Replace(str, pattern, final);
}

编辑:

输入:<style=foo>first non-tagged word 1st char upper</style>

预期输出:<style=foo>First non-tagged word 1st char upper</style>

标签: c#regex

解决方案


使用后向正则表达式功能,您可以匹配第一个不带 > 括号的“大写”,然后您可以将输出大写。
正则表达式如下:

(?<=<.*>)\w+

它将匹配 > 括号后的第一个单词


推荐阅读