如何在 C# 中正确解析字符串?我有下一个模式
"|?\d+(:\d+([lLrR])?)?"
bool bV = 是否有垂直线;
然后 int iL = 数字;
跳过 ':'
然后 int iD = number;
和 bool bS = 是否有字母。
如果我用 C 语言编写,我可以自己编写如下:
char* s = str; char* s1 = str1;
if( *s == '|' ) { bV == 1; s++; }
while( isdigit (*s) )
{ *s1 = s++; s1++; } s1 = 0;
iL = itoa (str1);
// and so on..
但是在 C# 中它看起来很愚蠢。我读过String.Split
and Regex.Split
,但在它工作之后我也需要写分支。我认为有更好的方法。你知道吗?
我会尽力解释。有专门用于解析的功能吗?像..
parseString(" {'|' | ''} {0} : {1} {'L'|'R'}", string, int, int, string);
像 ReadConsole 有期望数值的地方。我只是问问。框架有很多有趣的功能。
目前我尝试使用正则表达式并有这样的东西:
{
string pattern = @"(?<bVect>[|]?)\s*(?<iDest>\d+)(\s*:\s*(?<iLvl>\d+)*\s*(?<bSide>[LRlr]?)?)";
RegexOptions option = RegexOptions.IgnoreCase;
Regex newReg = new Regex(pattern,option);
MatchCollection matches = newReg.Matches(str);
// Here starting 'Branches' = 'if-statements' I mean
if(matches.Count != 1) { /* error */}
bV = (matches[0].Groups["bVect"].Value == "|");
bS = (matches[0].Groups["bSide"].Value != "");
string ss = matches[0].Groups["iDest"].Value;
if (ss != "")
iD = Convert.ToInt32 (ss);
ss = matches[0].Groups["iLvl"].Value;
if( ss != "" )
iL = Convert.ToInt32 (ss);
}