0

以下のコードは、正規表現が文字列と一致する場合に機能します。MONEY-STAT がないなど、文字の 1 つが表示されない場合はどうなりますか?

string s = "MONEY-ID123456:MONEY-STAT43:MONEY-PAYetr-1232832938";
Regex regex =
    new Regex(@"MONEY-ID(?<moneyId>.*?)\:MONEY-STAT(?<moneyStat>.*?)\:MONEY-PAYetr-(?<moneyPaetr>.*?)$");
Match match = regex.Match(s);
if (match.Success)
{
    Console.WriteLine("Money ID: " + match.Groups["moneyId"].Value);


    Console.WriteLine("Money Stat: " + match.Groups["moneyStat"].Value);
    Console.WriteLine("Money Paetr: " + match.Groups["moneyPaetr"].Value);

}

Console.WriteLine("hit <enter>");
Console.ReadLine();
4

3 に答える 3

1

に変更MONEY-STATしました(?:MONEY-STAT)?

MONEY-ID(?<moneyId>.*?)\:(?:MONEY-STAT)?(?<moneyStat>.*?)\:MONEY-PAYetr-(?<moneyPaetr>.*?)$

説明:

(?: subexpression)        Defines a noncapturing group. 
?                         Matches the previous element zero or one time.
于 2012-07-30T10:35:34.453 に答える
1

多分私はあなたの質問を誤解しています..しかし、これはあなたに合っていますか?

(MONEY-ID(?<moneyId>.*?)\:)?(MONEY-STAT(?<moneyStat>.*?)\:)?(MONEY-PAYetr-)?(?<moneyPaetr>.*?)$

基本的に、各トークンはオプションになります。これは明らかにある種の区切り文字であるため、コロンも含まれます。

免責事項 私は正規表現でひどいです..しかし、これはここでの私のテストからうまくいきました:http: //ideone.com/0pdFk

于 2012-07-30T10:37:12.747 に答える
0

これを試すことができます:

(MONEY-ID[\d]+|(:?)MONEY-STAT[\d]+|:MONEY-PAYetr-[\d]+)

これは、次のようなパターンに一致します。

MONEY-ID123456:MONEY-STAT43:MONEY-PAYetr-1232832938

MONEY-STAT43:MONEY-PAYetr-1232832938

MONEY-ID123456:MONEY-PAYetr-1232832938

于 2012-07-30T10:41:00.843 に答える