我想从WindowsForms中的richtextbox中读取一些用户输入。
我希望用户以特定格式编写文本,例如:
string text = "[3,true]#[5,false]#[9,false]"; // users input from the textfield
所以我想要的是一个字符串列表。
List<Tuple<string, string>> tempList = new List<Tuple<string, string>>();
此列表由上面的值
填充tempList .Add(new Tuple<string, string>("3", "true"));
tempList.Add(new Tuple<string, string>("5", "false"));
tempList.Add(new Tuple<string, string>("9", "false"));
我真的不知道如何从大文本中搜索子字符串。
这是我到目前为止所得到的:
private string FindNeighbourInText(string source, string start, string end)
{
int startPos;
int endPos;
if (source.Contains(start) && source.Contains(end))
{
startPos = source.IndexOf(start, 0) + start.Length;
endPos = source.IndexOf(end, startPos);
return source.Substring(startPos, endPos - startPos);
}
else
return string.Empty;
}
但似乎这不是正确的事情,我正在寻找。
答案 0 :(得分:0)
这是正则表达式的理想工作。
您可以使用此模式捕获所有变量,并使用数字和值\[(?<number>.*?),(?<value>.*?)\]
的命名组。
它会查找[
和]
之间的字符串。
这些字符由模式(characters),(characters)
组成。
逗号前面的字符放在名为number
的组中,逗号后面的字符名为value
。
然后,只需循环遍历所有匹配并查看捕获的命名组的值。
在代码中它看起来像这样:
void Main()
{
var data = "[3,true]#[5,false]#[9,false]";
var pattern = new Regex(@"\[(?<number>.*?),(?<value>.*?)\]");
foreach (Match match in pattern.Matches(data))
{
Console.WriteLine($"{match.Groups["number"]} = {match.Groups["value"]}" );
}
}
它产生以下输出:
3 = true
5 = false
9 = false
以下是Fiddle。