最适合我的Regex

本文关键字:Regex 我的 | 更新日期: 2023-09-27 18:17:35

所有,我有以下字符串列表

List<string> list = new List<string>() 
{ 
    "Japanese (Japan) (ja-jp)",
    "Scottish Gaelic (United Kingdom) (gd-gb)", 
    "German (Germany) (de-DE)", 
    "Amharic (Ethiopia) (am-et)"
};

我想从这个列表中得到以下字符串:

ja-jp
gd-gb
de-DE 
am-et

我目前正在使用组和Regex

Regex regex = new Regex(@"(.*)'s*('(.*'))'s*('(.*'))");

谁能提供更好的Regex ?

最适合我的Regex

如果您的代码将始终采用该格式,则可以使用子字符串提取而不是正则表达式:

var codes = list.Select(l => l.Substring(l.Length - 6, 5)).ToList();

如何:

@"^.*'((['w'-]+)')$"

它更短,只捕获相关文本。

var result =  list.Select(s=>s.Split('(').Last().TrimEnd(')')).ToList();

尝试将整个模式作为结果:

Regex regex = new Regex(@"(?>[^()]+)(?=')$)");

或简单的:

Regex regex = new Regex(@"[^()]+(?=')$)");

Regex regex = new Regex(@"^.*'((.+)')$");
foreach (string item in list)
{
    string result = regex.Match(item).Groups[1].Value;
}
var result = list.Select(s => Regex.Match(s, @"'(('w+'-'w+)')").Groups[1].Value)
                 .ToList();

@"(?<=[(])[a-zA-Z]{2}-[a-zA-Z]{2}(?=[)])"将只匹配括号中的xx-xx。这意味着thatPattern.Match(input).Value将等于它,而不必与捕获组胡闹。