,我有以下的代碼行,如何獲得括號內的子串在C#中的字符串?
if((s1 != null) && (!s1.Trim().Equals("")))
我怎麼可以拆分上面的字符串,這樣我可以得到次括號內的所有文本? 所以結果數組將包含s1 != null
和!s1.Trim().Equals("")
有沒有通用的方法,以便它可以被應用到與&&
n個字符串?
,我有以下的代碼行,如何獲得括號內的子串在C#中的字符串?
if((s1 != null) && (!s1.Trim().Equals("")))
我怎麼可以拆分上面的字符串,這樣我可以得到次括號內的所有文本? 所以結果數組將包含s1 != null
和!s1.Trim().Equals("")
有沒有通用的方法,以便它可以被應用到與&&
n個字符串?
您可以使用Regex。
string input = @"if((s1 != null) && (!s1.Trim().Equals("")))";
string pattern = @"\({2}(.*)\)\s&&\s\((.*)\){2}";
var values = Regex.Matches(input, pattern);
Console.WriteLine(values[0].Groups[1]); // s1 != null
Console.WriteLine(values[0].Groups[2]); // !s1.Trim().Equals("")
您還可以give a name to each group這樣的:
string input = @"if((s1 != null) && (!s1.Trim().Equals("")))";
string pattern = @"\({2}(?<FirstGroup>.*)\)\s&&\s\((?<SecondGroup>.*)\){2}";
var values = Regex.Matches(input, pattern);
Console.WriteLine(values[0].Groups["FirstGroup"]); // s1 != null
Console.WriteLine(values[0].Groups["SecondGroup"]); // !s1.Trim().Equals("")
舒爾,您應訪問匹配的結果之前(如果有)添加一些檢查。
正則表達式的解釋
此示例將表達成條件。隨意修改它也可以刪除每個單詞的括號。在另一方面,在上面的例子中與周圍&&
合併條款的括號不需要,.
var expression = @"if((s1 != null) && (!s1.Trim().Equals("")))";
// remove if, everything between outer brackets is relevant
var firstBracket = expression.IndexOf('(');
var lastBracket = expression.LastIndexOf(')');
string cleansed = expression.Substring(
firstBracket + 1,
expression.Length - firstBracket - (expression.Length - lastBracket) - 1);
// split and remove whitespaces
var potentialTerms = cleansed.Split(new string[] { "&&" }, StringSplitOptions.None).Select(x => x.Trim());
foreach (var term in potentialTerms)
{
Console.WriteLine(term);
}
// outputs:
// (s1 != null)
// (!s1.Trim().Equals("))