正则表达式拆分和过滤器结构

时间:2015-09-30 09:56:48

标签: c# regex

我需要过滤输入,只获得括号内的字符串: Test1,Test2,Test3 。我试过了,但它没有用。

 string input = "test test test @T(Test1)  sample text @T(Test2) Something else @T(Test3) ";
 string pattern = @"[@]";
 string[] substrings = Regex.Split(input, pattern);

2 个答案:

答案 0 :(得分:4)

您可以使用简单匹配。

(?<=@T\().*?(?=\))

string strRegex = @"(?<=@T\().*?(?=\))";
Regex myRegex = new Regex(strRegex, RegexOptions.None);
string strTargetString = @"test test test @T(Test1)  sample text @T(Test2) Something else @T(Test3) ";

foreach (Match myMatch in myRegex.Matches(strTargetString))
{
   if (myMatch.Success)
   {
    // Add your code here
  }
}

答案 1 :(得分:3)

请注意,@"[@]"正则表达式模式匹配输入字符串中任何位置的单个@字符。当你对它进行分裂时,你必然会获得超出你需要的东西。

你应该匹配而不是分裂:

string input = "test test test @T(Test1)  sample text @T(Test2) Something else @T(Test3) ";
string pattern = @"@T\((?<val>[^()]*)\)";
string[] substrings = Regex.Matches(input, pattern)
           .Cast<Match>()
           .Select(p => p.Groups["val"].Value)
           .ToArray();

enter image description here

@T\((?<val>[^()]*)\)正则表达式匹配:

  • @T - 文字@T
  • \( - 文字(
  • (?<val>[^()]*) - (包含&#34; val&#34;名称的组)除()以外的0个或多个字符
  • \) - 文字)