如何用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
相关产品推荐
相关产品推荐

