【发布时间】:2013-02-15 21:47:02
【问题描述】:
我需要提取引号之间的单词并将值存储在变量中。
我的实际字符串将是
m:'液体'n:'4'
来自上面的字符串。我需要提取
单词liquid & 4
并像这样存储
var m = "liquid";
var n = "4";
如何在 c# 的正则表达式中做到这一点
【问题讨论】:
我需要提取引号之间的单词并将值存储在变量中。
我的实际字符串将是
m:'液体'n:'4'
来自上面的字符串。我需要提取
单词liquid & 4
并像这样存储
var m = "liquid";
var n = "4";
如何在 c# 的正则表达式中做到这一点
【问题讨论】:
好吧,如果格式总是这样,那么您可以按: 拆分,并知道您将拥有一个以您想要的元素开头的字符串数组,介于' 字符之间。
【讨论】:
当你用“linq”标记你的问题时,你可以试试这个:
var str = @"m:'liquid' n:'4'";
var r = str.Split(new [] {'\''}).Where((s, i) => i % 2 == 1).ToArray();
var m = r[0];
var n = r[1];
【讨论】:
Regex regex = new Regex("(?<=')\\w+(?<!')");
var matches = regex.Matches("m:'liquid' n:'4'");
将匹配任何以 ' 开头并后跟 ' 的单词。
var m = matches[0];
var n = matches[1];
【讨论】:
这是一个通用的解决方案
public Dictionary<string, string> GetValues(string input)
{
var results = new Dictionary<string, string>();
var pairs = input.Split(" ");
foreach(var pair in pairs)
{
var parts = pair.Split(":");
results.Add(parts[0], parts[1].Trim("'"));
}
return results;
}
var str = "m:'liquid' n:'4'";
var values = GetValues(str);
var m = values["m"];
var n = values["n"];
【讨论】:
var s = "m:'liquid' n:'4'";
var ss = s.Split(new char[]{' ', ':'}, StringSplitOptions.RemoveEmptyEntries);
您将在 ss 中找到这些对:{"m", "'liquid'", "n", "'4'"}。如果有空值(''),它就可以工作。
【讨论】:
您实际上可以使用 .indexOf 字符串
var x = "m:'liquid' n:'4'";
var split = x.Split(' ');
var indexm0 = split[0].IndexOf("'");
var indexm1 = split[0].LastIndexOf("'");
var m = split[0].Substring(indexm0, indexm1 - 1);
var indexn0 = split[1].IndexOf("'");
var indexn1 = split[1].LastIndexOf("'");
var n = split[1].Substring(indexn0, indexn1 - 1);
【讨论】: