Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 带有字典键的正则表达式匹配_C#_Regex - Fatal编程技术网

C# 带有字典键的正则表达式匹配

C# 带有字典键的正则表达式匹配,c#,regex,C#,Regex,我正在扩展我以前问过的问题 在我解释之前,这里是我的C代码: 静态字典现象=新字典 { {-”,“光”}, {\\+,“重”}, {“\bVC\b”,“在附近”}, //描述符 {“米”,“浅”}, {“PR”,“Partial”}, {“BC”,“补丁”}, {“DR”,“低漂移”}, {“BL”,“吹”}, {“SH”,“阵雨”}, {“TS”,“雷雨”}, {“FZ”,“冻结”}, //沉淀 {“DZ”,“毛毛雨”}, {“拉”,“雨”}, {“SN”,“Snow”}, {“SG”,“雪粒

我正在扩展我以前问过的问题

在我解释之前,这里是我的C代码:

静态字典现象=新字典
{
{-”,“光”},
{\\+,“重”},
{“\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();
}