C# 正则表达式缺少字符
下面的代码在正则表达式与字符串匹配时工作。如果其中一个字符不在那里,例如MONEY-STAT丢失,该怎么办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>.
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]+)