所以我之前问过这个问题并说我想在javascript中使用它,但后来意识到这是不必要的数据发送。所以,如果有人能帮助我在C#中解决同样的问题,那将会很棒。
我需要的是从字符串中获取几个属性。
字符串看起来像:
str = "car[brand=saab][wheels=4]";
可以有更多或更少的属性。
我需要在1变量中的第一个[]之前的所有内容。
然后我需要每个属性及其在变量中的值。
了解我想要的最简单的方法可能是检查我的previous question以及解决它的答案:)
答案 0 :(得分:2)
试试这个正则表达式:
(.+?)(\[.+?\])+
和示例代码:
var inputString = "car[brand=saab][wheels=4]";
var pattern = @"(?<v1>.+?)(?<v2>\[.+?\])+";
var v1 = Regex.Match(inputString, pattern).Groups["v1"].Value;
Dictionary<String, String> list = new Dictionary<String, String>();
foreach (Capture capture in Regex.Match(inputString, pattern).Groups["v2"].Captures)
{
var sp = capture.Value.Split('=');
list.Add(sp[0], sp[1]);
}
解释
的
(?<name>subexpression)
强> 的 将匹配的子表达式捕获到命名组中。
答案 1 :(得分:2)
我在previous question中使用了正则表达式(略有不同)。
string input = "car[brand=saab][wheels=4]";
string product = "";
Dictionary<string, string> props = new Dictionary<string, string>();
foreach (Match m in Regex.Matches(input, @"^(\w+)|\[(\w+)=(.+?)\]"))
{
if (String.IsNullOrEmpty(product))
product = m.Groups[1].Value;
else
props.Add(m.Groups[2].Value, m.Groups[3].Value);
}
答案 2 :(得分:1)
你可以这样做
var lst=Regex.Matches(input,@"(\w+)((?:\[.*?\])+)")
.Cast<Match>()
.Select(x=>new
{
name=x.Groups[1].Value,
value=Regex.Matches(x.Groups[2].Value,@"(?<=\[).*?(?=\])")
.Cast<Match>()
.Select(x=>new
{
name=x.Groups[0].Value.Split('=')[0],
value=x.Groups[0].Value.Split('=')[1]
})
});
现在你可以像这样迭代lst
foreach(var parent in lst)
{
parent.name;//car
foreach(var pairs in parent.value)
{
pairs.name;//brand,wheels
pairs.value;//ferrari,4
}
}
因此,对于输入car[brand=a][wheels=4]cycle[brand=b][wheels=2]
输出就像
car
brand,a
wheels,4
cycle
brand,b
wheels,2
答案 3 :(得分:0)
由于您已经使用正则表达式获得了答案,并且您的评论声明它不一定是正则表达式,我将提供替代方案:
代码是
string str = ("car[brand=saab][wheels=4]");
int i = str.IndexOf("[");
string[] details =str.Substring(i).Replace("]","").Split('[');
string name = str.Substring(0, i);
string brand = details[1].Split('=')[1];
string wheels = details[2].Split('=')[1];
这种方法假设数据总是采用相同的格式;根据您的需要,您可能需要进行一些验证......
答案 4 :(得分:0)
没有正则表达式:
string input = "car[brand=saab][wheels=4]";
var query = from s in input.Replace("]", "").Split('[')
let vars = s.Split('=')
let name = vars[0]
let value = vars.Length > 1 ? vars[1] : ""
select new {Name = name, Value = value};
string firstVar = query.First().Name;
Dictionary<string, string> otherVars = query
.Skip(1)
.ToDictionary(v => v.Name, v => v.Value);
您可以在字典中访问您的变量,例如string brand = otherVars["brand"]