弦首,尾部遵循特定模式

时间:2019-03-18 10:23:02

标签: c# regex

我收到的字符串可以等于any + " " + str + "Y",其中any可以是任何字符串,而字符串str可以等于"1""2""3""5""7""10"。我的目标是提取字符串any

我想出了以下代码:

string pattern = ".* {1Y|2Y|3Y|5Y|7Y|10Y}";
string indexIDTorParse = group.ElementAt(0).IndexID;
Match result = Regex.Match(indexIDTorParse, pattern);
string IndexIDTermBit = result.Value;
string IndexID = indexIDTorParse.Replace($" {IndexIDTermBit}", "");

但是它没有给出正确的any

1 个答案:

答案 0 :(得分:6)

您应该使用parentheses来定义一组模式,而不要使用括号,并且可以捕获 any部分,并直接通过{{3}访问它},而不是另外替换输入字符串:

string pattern = @"(.*) (?:[1-357]|10)Y";
string indexIDTorParse = group.ElementAt(0).IndexID;
Match result = Regex.Match(indexIDTorParse, pattern);
string IndexID = "";
if (result.Success) 
{
    IndexID = result.Groups[1].Value;
}

正则表达式匹配:

  • (.*)-第1组:任意0个或更多字符,并尽可能多(注意,如果您需要使子字符串直到nY的第一次出现,使用(.*?),它将在后续模式之前匹配尽可能少的字符)
  • -一个空格
  • (?:[1-357]|10)-12, 3 , 5 , 7 or 10`
  • Y-一个Y字符。

请参见Match.Groups