1

コンソールから 3 つのパラメーターを取得する際に問題が発生しました。たとえば、ユーザーはコンソールに次のように入力します: '/s: http://asdasd.asd /e:device /f:create'

string params = Console.ReadLine(); // /s:http://asdasd.asd /e:device /f:create'

これらのパラメーターを取得する必要があります

string server = ""; //should be "http://asdasd.asd"
string entity = ""; //should be "device"
string function = "" //should be "create"

私はそれを行う方法を理解できません。お願い助けて)

コンソールの例 http://d.pr/i/kTpX

4

6 に答える 6

1

これを使って:

`(?<=/s:)[^ ]+`
`(?<=/e:)[^ ]+`
`(?<=/f:)[^ ]+`
于 2013-05-14T08:23:36.857 に答える
1

入力引数を解析するための優れた外部ユーティリティがあります。独自のコードを書く代わりに、それらを使用できます。私は次のことを知っていました:

それはあなたにとってずっと簡単になります。

于 2013-05-14T08:25:05.583 に答える
1

スペース文字で分割し、その後に最初の「:」で分割します。何かのようなもの:

string input = "/s:http://asdasd.asd /e:device /f:create";

string[] parameters = input.Split(' ');

foreach (string param in parameters)
{
    string command = "";
    string value = "";

    command = param.Substring(0, param.IndexOf(':'));
    value = param.Substring(param.IndexOf(':') + 1);
}

// Results:
// command: /s value: http://asdasd.asd
// command: /e value: device
// command: /f value: create

役立つライブラリがあるかもしれませんし、正規表現を選択することもできます。ただし、この状況では必須ではありません。明らかに、間違った入力の場合のエラー処理コードが必要ですが、それは自分で管理できると思います。

于 2013-05-14T08:30:37.843 に答える
0

さらに簡単な解決策は次のとおりです。

(?<=\:)[^ ]+

この単一の正規表現は 3 つのグループを返します。

于 2013-05-14T10:12:03.713 に答える
0

それを行い、必要なものでグループ化する正規表現の例を次に示します。

/s:([^ ]{1,100}) /e:([^ ]{1,100}) /f:([^ ]{1,100})

また、http://regexpal.com/を使用して作成方法を学習することをお勧めします。

編集:これは非常に具体的な例であり、考えられるすべてのケースをカバーしているわけではありません。上記の Web サイトでさまざまな入力をテストして、必要な変更を加えます。

于 2013-05-14T08:31:11.703 に答える