C# 带有字典键的正则表达式匹配
我正在扩展我以前问过的问题 在我解释之前,这里是我的C代码:C# 带有字典键的正则表达式匹配,c#,regex,C#,Regex,我正在扩展我以前问过的问题 在我解释之前,这里是我的C代码: 静态字典现象=新字典 { {-”,“光”}, {\\+,“重”}, {“\bVC\b”,“在附近”}, //描述符 {“米”,“浅”}, {“PR”,“Partial”}, {“BC”,“补丁”}, {“DR”,“低漂移”}, {“BL”,“吹”}, {“SH”,“阵雨”}, {“TS”,“雷雨”}, {“FZ”,“冻结”}, //沉淀 {“DZ”,“毛毛雨”}, {“拉”,“雨”}, {“SN”,“Snow”}, {“SG”,“雪粒
静态字典现象=新字典
{
{-”,“光”},
{\\+,“重”},
{“\bVC\b”,“在附近”},
//描述符
{“米”,“浅”},
{“PR”,“Partial”},
{“BC”,“补丁”},
{“DR”,“低漂移”},
{“BL”,“吹”},
{“SH”,“阵雨”},
{“TS”,“雷雨”},
{“FZ”,“冻结”},
//沉淀
{“DZ”,“毛毛雨”},
{“拉”,“雨”},
{“SN”,“Snow”},
{“SG”,“雪粒”},
{“IC”,“冰晶”},
{“PL”,“冰粒”},
{“GR”,“Hail”},
{“GS”,“小冰雹/雪球”},
{“向上”,“Uknown降水”},
//模糊
{“BR”,“Mist”},
{“FG”,“Fog”},
{“福”,“烟”},
{“VA”,“火山灰”},
{“DU”,“广泛的灰尘”},
{“SA”,“Sand”},
{“HZ”,“Haze”},
{“PY”,“Spray”},
//其他
{“PO”,“发育良好的灰尘/沙尘漩涡”},
{“SQ”,“飑”},
{“FC”,“漏斗云龙卷风水龙卷”},
{“SS”,“沙尘暴”},
{“DS”,“沙尘暴”}
};
公共静态字符串进程(字符串元)
{
metar=Regex.Replace(metar,”(?根据代码的结构,我建议对输入字符串进行预解析,将强度指示器“移动”到它们不修改的术语之后,以便按照最有意义的顺序出现单词
太长了,读不下去了,我可以考虑在你的字典里加几个键来覆盖每种类型的降水的+/-版本,这样就可以简化你的总体代码了。< /P> TL;DR你能给我们简短的版本吗?你需要一个正则表达式来解释什么?为什么不定义正则表达式来提取你想要的而不是篡改I?输入字符串?
static Dictionary<string, string> phenom = new Dictionary<string, string>
{
{"-", "Light"},
{"\\+", "Heavy"},
{"\bVC\b","In the Vicinity"},
// descriptor
{"MI","Shallow"},
{"PR","Partial"},
{"BC","Patches"},
{"DR","Low Drifting"},
{"BL","Blowing"},
{"SH","Showers"},
{"TS","Thunderstorm"},
{"FZ","Freezing"},
// precipitation
{"DZ","Drizzle"},
{"RA","Rain"},
{"SN","Snow"},
{"SG","Snow Grains"},
{"IC","Ice Crystals"},
{"PL","Ice Pellets"},
{"GR","Hail"},
{"GS","Small Hail/Snow Pellets"},
{"UP","Uknown Precipitation"},
// obscuration
{"BR","Mist"},
{"FG","Fog"},
{"FU","Smoke"},
{"VA","Volcanic Ash"},
{"DU","Widespread Dust"},
{"SA","Sand"},
{"HZ","Haze"},
{"PY","Spray"},
// other
{"PO","Well-Developed Dust/Sand Whirls"},
{"SQ","Squalls"},
{"FC","Funnel Cloud Tornado Waterspout"},
{"SS","Sandstorm"},
{"DS","Duststorm"}
};
public static string Process(String metar)
{
metar = Regex.Replace(metar, "(?<=A[0-9]{4}).*", "");
StringBuilder _string = new StringBuilder();
var results = from result in phenom
where Regex.Match(metar, result.Key, RegexOptions.Singleline).Success
select result;
foreach (var result in results)
{
if (result.Key == "DZ" || result.Key == "RA" || result.Key == "SN" || result.Key == "SG" || result.Key == "PL")
{
switch (result.Key)
{
case "+":
_string.Append("Heavy ");
break;
case "-":
_string.Append("Light");
break;
case "VC":
_string.Append("In the Vicinity ");
break;
default:
break;
}
}
_string.AppendFormat("{0} ", result.Value);
}
return _string.ToString();
}