最适合我的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
?
如果您的代码将始终采用该格式,则可以使用子字符串提取而不是正则表达式:
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
将等于它,而不必与捕获组胡闹。