0

私のPythonコードには、次のようなものがあります。

Type1 = [re.compile("-" + d + "-")  for d in "49 48 29 ai au2".split(' ')]
Type2 = [re.compile("-" + d + "-")  for d in "ki[0-9] 29 ra9".split(' ')]

Everything = {"Type1": Type1, Type2: Type2}

そして、入力文字列の型を返す小さな関数。

def getInputType(input):
    d = "NULL"
    input = input.lower()
    try:
        for type in Everything:
            for type_d in Everything[type]:
                code = "-" + input.split('-')[1] + "-"
                if type_d.findall(code):
                    return type
    except:
        return d
    return d

これらの複数の正規表現を C# で定義するのに相当する 1 行はありますか、それともそれぞれを個別に宣言する必要がありますか? 要するに、これを C# に変換する良い方法は何ですか?

4

1 に答える 1

1

かなり簡単な翻訳は次のようになると思います。

Dictionary<string, List<Regex>> everything = new Dictionary<string, List<Regex>>()
{
    { "Type1", "49 48 29 ai au2".Split(' ').Select(d => new Regex("-" + d + "-")).ToList() },
    { "Type2", "ki[0-9] 29 ra9".Split(' ').Select(d => new Regex("-" + d + "-")).ToList() },
}

string GetInputType(string input)
{
    var codeSegments = input.ToLower().Split('-');
    if(codeSegments.Length < 2) return "NULL";

    string code = "-" + codeSegments[1] + "-";
    var matches = everything
        .Where(kvp => kvp.Value.Any(r => r.IsMatch(code)));

    return matches.Any() ? matches.First().Key : "NULL";
}
于 2012-09-23T19:50:34.580 に答える