Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.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,下面的代码在正则表达式与字符串匹配时工作。如果其中一个字符不在那里,例如MONEY-STAT丢失,该怎么办 string s = "MONEY-ID123456:MONEY-STAT43:MONEY-PAYetr-1232832938"; Regex regex = new Regex(@"MONEY-ID(?<moneyId>.*?)\:MONEY-STAT(?<moneyStat>.*?)\:MONEY-PAYetr-(?<moneyPaetr>.

下面的代码在正则表达式与字符串匹配时工作。如果其中一个字符不在那里,例如MONEY-STAT丢失,该怎么办

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();
string s=“MONEY-ID123456:MONEY-STAT43:MONEY-PAYetr-1232832938”;
正则表达式正则表达式=
新的正则表达式(@“MONEY-ID(?.*?):MONEY-STAT(?.*?):MONEY-PAYetr-(?.*?)$”;
匹配=正则表达式匹配;
如果(匹配成功)
{
Console.WriteLine(“货币ID:+match.Groups[“货币ID”].Value”);
Console.WriteLine(“Money Stat:+match.Groups[“moneyStat”].Value”);
Console.WriteLine(“Money Paetr:+match.Groups[“Money Paetr”].Value);
}
控制台。写入线(“命中”);
Console.ReadLine();

我将
MONEY-STAT
更改为
(?:MONEY-STAT)


也许我误解了你的问题。。但是这个适合你吗

(MONEY-ID(?<moneyId>.*?)\:)?(MONEY-STAT(?<moneyStat>.*?)\:)?(MONEY-PAYetr-)?(?<moneyPaetr>.*?)$
(MONEY-ID(?.*?\:)?(MONEY-STAT(?.*?\:)?(MONEY-PAYetr-)(?*)$
它基本上使每个令牌都是可选的。。它还包括冒号,因为冒号显然是某种分隔符

免责声明 我对正则表达式很在行。。但是这在我的测试中奏效了:

你可以试试这个:

(MONEY-ID[\d]+|(:?)MONEY-STAT[\d]+|:MONEY-PAYetr-[\d]+)
这将匹配如下模式:

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

MONEY-STAT43:MONEY-PAYetr-1232832938

MONEY-ID123456:MONEY-Paytr-1232832938


如果(match.Success){…},那么它将不匹配,也不会执行
if(match.Success){…}
中的代码。为什么不自己尝试一下呢?@Steve B不会工作,如果字符串不工作。我能用正则表达式字符串改变什么?所以你的问题不是“如果其中一个字符不在那里怎么办?”而是“提取我的值的正确正则表达式是什么?”
(MONEY-ID(?<moneyId>.*?)\:)?(MONEY-STAT(?<moneyStat>.*?)\:)?(MONEY-PAYetr-)?(?<moneyPaetr>.*?)$
(MONEY-ID[\d]+|(:?)MONEY-STAT[\d]+|:MONEY-PAYetr-[\d]+)