使用正则表达式分离3个变量

时间:2018-03-14 09:57:39

标签: c# regex

如果我有这种格式的字符串:

string placeholder = "[[Ford:Focus(blue)]]";

string placeholder = "[[Ford:Focus(light blue)]]";

我可以用什么正则表达式来填充下面的三个变量?

string make = ?
string model = ?
string colour = ?

有什么想法吗?

谢谢,

4 个答案:

答案 0 :(得分:2)

这可以使用正则表达式和组来完成:

string strRegex = @"\[(?<make>\w*):(?<model>\w*)\((?<colour>.*)\)";
Regex myRegex = new Regex(strRegex, RegexOptions.None);
string strTargetString = @"[[Ford:Focus(blue)]]";

foreach (Match myMatch in myRegex.Matches(strTargetString))
{
    if (myMatch.Success)
    {
        var make = myMatch.Groups["make"].Value;
        var model = myMatch.Groups["model"].Value;
        var colour = myMatch.Groups["colour"].Value;
    }
}

答案 1 :(得分:1)

你可以尝试

([^:\[\]]*):([^(]*)\(([^)]*)\)

Demo

说明:

  • ([^:\[\]]*)捕获make(任何不是方括号和:的内容)
  • :分隔模型
  • ([^(]*)匹配模型
  • \(([^)]*)\)匹配括号内的颜色(括号括起来的所有内容)

答案 2 :(得分:1)

如果您想避免使用RegEx - 使用Split()

的另一种方法
string placeholder = "[[Ford:Focus(light blue)]]";
string[] result = placeholder.Split(new[] { '[', ']', '(', ')', ':' }, StringSplitOptions.RemoveEmptyEntries);
string make = result[0];
string model = result[1];
string colour = result[2];

https://dotnetfiddle.net/0iKNgJ

答案 3 :(得分:0)

如果括号是字符串的一部分,您可以使用类似

的内容
\[\[(.*):(.*)\((.*)\)