C# 如何使用String.IndexOf方法查找正确的值?

C# 如何使用String.IndexOf方法查找正确的值?,c#,regex,string,winforms,indexof,C#,Regex,String,Winforms,Indexof,我想让我的句子如下所示,但如何使用String.IndexOf方法找到MINVALUE的正确值,以给定条件下句子中的值变化为起点 句子 创建序列“MY_TEST_SEQUENCE”MINVALUE 8 MAXVALUE 999增量1从55缓存开始20 NOORDER NOCYCLE 结果 创建序列“MY_TEST_SEQUENCE”MINVALUE 8 MAXVALUE 999增量1从8缓存开始20 NOORDER NOCYCLE 条件 如果MINVALUE具有加号(8),则以与相同的值开始 最

我想让我的句子如下所示,但如何使用String.IndexOf方法找到MINVALUE的正确值,以给定条件下句子中的值变化为起点

句子

创建序列“MY_TEST_SEQUENCE”MINVALUE 8 MAXVALUE 999增量1从55缓存开始20 NOORDER NOCYCLE

结果

创建序列“MY_TEST_SEQUENCE”MINVALUE 8 MAXVALUE 999增量1从8缓存开始20 NOORDER NOCYCLE

条件

  • 如果MINVALUE具有加号(8),则以与相同的值开始 最小值(8)
  • 如果MINVALUE具有负(-8)值,则使用与MAXVALUE(999)相同的值启动
  • 我的代码

    var起始值=0;
    如果(最小值>0)
    {
    起始值=最小值;
    }
    Else if(最小值<0)
    {
    起始值=最大值;
    }
    var result=String.Format(@“创建序列”“我的测试序列”“最小值8最大值999递增1以{0}缓存20 NOORDER NOCYCLE开始”,startvalue)
    
    似乎带有捕获组的正则表达式比试图将字符串拆分成碎片更合适

    var regex = new Regex(@".*\s+MINVALUE\s+(-?\d*)\s+MAXVALUE\s+(-?\d*)\s+.*");
    var sentence = @"CREATE SEQUENCE ""MY_TEST_SEQUENCE"" MINVALUE 8 MAXVALUE 999 INCREMENT BY 1 START WITH 55 CACHE 20 NOORDER NOCYCLE";
    
    var match = regex.Match(sentence);
    
    if (match.Groups.Count != 3)
    {
        throw new ApplicationException("input string not in expected format");
    }
    
    var minValue = int.Parse(match.Groups[1].Value);
    var maxValue = int.Parse(match.Groups[2].Value);
    
    var result = string.Format(@"CREATE SEQUENCE ""MY_TEST_SEQUENCE"" MINVALUE 8 MAXVALUE 999 INCREMENT BY 1 START WITH {0}  CACHE 20 NOORDER NOCYCLE", minValue < 0 ? maxValue : minValue);
    
    var regex=new regex(@.*\s+MINVALUE\s+(?\d*)\s+MAXVALUE\s+(?\d*)\s+*);
    var语句=@“创建序列”“我的测试序列”“最小值8最大值999增量1从55缓存20 NOORDER NOCYCLE开始”;
    var match=regex.match(句子);
    如果(match.Groups.Count!=3)
    {
    抛出新的ApplicationException(“输入字符串不是预期格式”);
    }
    var minValue=int.Parse(match.Groups[1].Value);
    var maxValue=int.Parse(match.Groups[2].Value);
    var result=string.Format(@“CREATE SEQUENCE”“MY_TEST_SEQUENCE”“MINVALUE 8 MAXVALUE 999递增1,从{0}缓存20 NOORDER NOCYCLE开始),MINVALUE<0?MAXVALUE:MINVALUE);
    
    我认为这应该适合你

    string sentence = @"CREATE SEQUENCE 'MY_TEST_SEQUENCE' MINVALUE -8 MAXVALUE 999 INCREMENT BY 1 START WITH 55 CACHE 20 NOORDER NOCYCLE";
    string pattern = @".*\s+MINVALUE[ ]*(?<MinValue>[-?\d]*)[ ]*MAXVALUE[ ]*(?<MaxValue>[\d]*)";
    Regex rgx = new Regex(pattern);
    Match match = rgx.Match(sentence);
    Group gp1 = match.Groups[1];//-8 or 8 (both valid).
    Group gp2 = match.Groups[2];//Value after MAXVALUE.
    if (gp1.Value.StartsWith("-") == false)//No minus sign,that must be a positive value.
    {
      string s2 = string.Format(@"CREATE SEQUENCE ""MY_TEST_SEQUENCE"" MINVALUE 8 MAXVALUE 999  INCREMENT BY 1 START WITH {0} CACHE 20 NOORDER NOCYCLE", gp1.Value);
      MessageBox.Show(s2);
    }
    
    else if (gp1.Value.StartsWith("-") == true)//No need for further checking, a value with - will always be smaller.
    {
      string s2 = string.Format(@"CREATE SEQUENCE ""MY_TEST_SEQUENCE"" MINVALUE 8 MAXVALUE 999 INCREMENT BY 1 START WITH {0} CACHE 20 NOORDER NOCYCLE", gp2.Value);
      MessageBox.Show(s2);
    }
    
    string-SEQUENCE=@“创建序列‘我的测试序列’最小值-8最大值999递增1以55缓存20 NOORDER NOCYCLE开始”;
    字符串模式=@“*\s+MINVALUE[]*(?[-?\d]*)[]*MAXVALUE[]*(?[\d]*)”;
    正则表达式rgx=新正则表达式(模式);
    Match=rgx.Match(句子);
    组gp1=匹配。组[1]//-8或8(均有效)。
    组gp2=匹配。组[2]//MAXVALUE之后的值。
    如果(gp1.Value.StartsWith(“-”==false)//没有减号,则该值必须为正值。
    {
    string s2=string.Format(@“创建序列”“我的测试序列”“最小值8最大值999递增1,从{0}缓存20 NOORDER NOCYCLE开始”,gp1.Value);
    MessageBox.Show(s2);
    }
    else if(gp1.Value.StartsWith(“-”==true)//无需进一步检查,带有-的值将始终较小。
    {
    string s2=string.Format(@“创建序列”“我的测试序列”“最小值8最大值999递增1,从{0}缓存20 NOORDER NOCYCLE开始”,gp2.Value);
    MessageBox.Show(s2);
    }
    
    c#在String类上是否有
    indexOf
    方法?我相信您不需要逃避“使用@时。你可以使用@,所以你不需要这样做。@ethorn10这不是家庭作业!错误1“System.ApplicationException”是一个“类型”,但像“变量”一样使用@user2760129-忘记包含
    新的
    ,fixed@user2760129-我没有测试它,忽略了一个事实,即整个字符串将是比赛组之一。我现在已经修好了。我希望这不是为了上课。如果是的话,你最好对正则表达式做一些快速的研究,以防你的教授想知道你是如何得出这个解的。:)你能帮我吗
    
    string sentence = @"CREATE SEQUENCE 'MY_TEST_SEQUENCE' MINVALUE -8 MAXVALUE 999 INCREMENT BY 1 START WITH 55 CACHE 20 NOORDER NOCYCLE";
    string pattern = @".*\s+MINVALUE[ ]*(?<MinValue>[-?\d]*)[ ]*MAXVALUE[ ]*(?<MaxValue>[\d]*)";
    Regex rgx = new Regex(pattern);
    Match match = rgx.Match(sentence);
    Group gp1 = match.Groups[1];//-8 or 8 (both valid).
    Group gp2 = match.Groups[2];//Value after MAXVALUE.
    if (gp1.Value.StartsWith("-") == false)//No minus sign,that must be a positive value.
    {
      string s2 = string.Format(@"CREATE SEQUENCE ""MY_TEST_SEQUENCE"" MINVALUE 8 MAXVALUE 999  INCREMENT BY 1 START WITH {0} CACHE 20 NOORDER NOCYCLE", gp1.Value);
      MessageBox.Show(s2);
    }
    
    else if (gp1.Value.StartsWith("-") == true)//No need for further checking, a value with - will always be smaller.
    {
      string s2 = string.Format(@"CREATE SEQUENCE ""MY_TEST_SEQUENCE"" MINVALUE 8 MAXVALUE 999 INCREMENT BY 1 START WITH {0} CACHE 20 NOORDER NOCYCLE", gp2.Value);
      MessageBox.Show(s2);
    }