WindowsForms - 搜索"参数"在RichTextBox中

时间:2017-03-31 17:32:31

标签: c#

我想从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;
}

但似乎这不是正确的事情,我正在寻找。

1 个答案:

答案 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

相关问题