我需要过滤输入,只获得括号内的字符串: 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);
答案 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();
@T\((?<val>[^()]*)\)
正则表达式匹配:
@T
- 文字@T
\(
- 文字(
(?<val>[^()]*)
- (包含&#34; val&#34;名称的组)除(
或)
以外的0个或多个字符\)
- 文字)