You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用C#正则表达式提取大小写字母?需支持希腊字母扩展

解决C#正则提取大小写字母及扩展希腊字母的问题

你的代码问题出在正则分组的匹配顺序上:(?'Alphabet'[a-zA-Z]+)这个分组永远不会被触发,因为前面的[a-z]+和[A-Z]+已经优先匹配了纯小写/大写的连续字母块,正则引擎不会再尝试后续的分组。另外Regex.Matches返回的匹配结果本身就是按出现顺序排列的,OrderBy(s => s.Index)属于多余操作。

修正后的拉丁字母提取代码

如果你的需求是把连续的纯小写字母归为AlphabetLower、纯大写字母归为AlphabetUpper、数字归为Number,可以用以下正则和代码:

using System;
using System.Text.RegularExpressions;

class Program
{
    static void Main()
    {
        string inputText = "afaUTE123567645gfhdDSFSD21312ASDFSAF21312sdafASasdfDF213asefd";
        // 先匹配大写、再小写、最后数字,确保同类型连续字符被正确分组
        string pattern = @"(?<AlphabetUpper>[A-Z]+)|(?<AlphabetLower>[a-z]+)|(?<Number>[0-9]+)";
        
        var matches = Regex.Matches(inputText, pattern);
        
        foreach (Match match in matches)
        {
            if (match.Groups["AlphabetUpper"].Success)
            {
                Console.WriteLine($"AlphabetUpper: {match.Groups["AlphabetUpper"].Value}");
            }
            else if (match.Groups["AlphabetLower"].Success)
            {
                Console.WriteLine($"AlphabetLower: {match.Groups["AlphabetLower"].Value}");
            }
            else if (match.Groups["Number"].Success)
            {
                Console.WriteLine($"Number: {match.Groups["Number"].Value}");
            }
        }
    }
}

这段代码会输出:

AlphabetLower: afa
AlphabetUpper: UTE
Number: 123567645
AlphabetLower: gfhd
AlphabetUpper: DSFSD
Number: 21312
AlphabetUpper: ASDFSAF
Number: 21312
AlphabetLower: sdaf
AlphabetUpper: AS
AlphabetLower: asdf
AlphabetUpper: DF
Number: 213
AlphabetLower: asefd

扩展支持希腊字母

如果要添加希腊字母的匹配,可以利用Unicode字符范围:

  • 大写希腊字母:[Α-Ω](对应Unicode U+0391到U+03A9)
  • 小写希腊字母:[α-ω](对应Unicode U+03B1到U+03C9)

需求1:区分拉丁/希腊的大小写字母

如果需要分别识别拉丁和希腊的字母块,可以调整正则:

string pattern = @"(?<LatinUpper>[A-Z]+)|(?<LatinLower>[a-z]+)|(?<GreekUpper>[Α-Ω]+)|(?<GreekLower>[α-ω]+)|(?<Number>[0-9]+)";

需求2:合并所有大写/小写字母(含拉丁+希腊)

如果只需要区分大小写,不管是拉丁还是希腊字母,可以用:

string pattern = @"(?<AlphabetUpper>[A-ZΑ-Ω]+)|(?<AlphabetLower>[a-zα-ω]+)|(?<Number>[0-9]+)";

需求3:支持混合类型的字母块

如果存在大小写混合或拉丁希腊混合的字母块,需要单独分组,可以把混合块的正则放在最后:

string pattern = @"(?<AlphabetUpper>[A-ZΑ-Ω]+)|(?<AlphabetLower>[a-zα-ω]+)|(?<Number>[0-9]+)|(?<MixedLetters>[A-Za-zΑ-Ωα-ω]+)";

内容的提问来源于stack exchange,提问作者user10423802

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 12:33:23