Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#Winforms搜索开始和结束字符串并获取选择_C#_Winforms_Richtextbox - Fatal编程技术网

C#Winforms搜索开始和结束字符串并获取选择

C#Winforms搜索开始和结束字符串并获取选择,c#,winforms,richtextbox,C#,Winforms,Richtextbox,我使用C#Winforms RichTextBox加载和显示一些日志文件。 这些日志文件使用ANSI转义字符为日志文件着色 找到了一些示例来查找和突出显示搜索字符串,但我想搜索开始字符串和结束字符串,获取这些选择,并在它们之间为内容着色 示例:以前的文本ESC[36m一些日志内容ESC[0m一些其他文本 因此,我可以加载并搜索字符串,但我未能成功创建一个函数,该函数将ESC[36m作为第一个字符串搜索,将ESC[0m作为第二个字符串搜索,然后返回它的TextRange,以便我可以在后面突出显示它

我使用C#Winforms RichTextBox加载和显示一些日志文件。 这些日志文件使用ANSI转义字符为日志文件着色

找到了一些示例来查找和突出显示搜索字符串,但我想搜索开始字符串和结束字符串,获取这些选择,并在它们之间为内容着色

示例:
以前的文本ESC[36m一些日志内容ESC[0m一些其他文本

因此,我可以加载并搜索字符串,但我未能成功创建一个函数,该函数将
ESC[36m
作为第一个字符串搜索,将
ESC[0m
作为第二个字符串搜索,然后返回它的
TextRange
,以便我可以在后面突出显示它

更新
为了澄清,我不仅需要string-search-1和string-search-2之间的文本,还需要一个选择文本的
TextRange
,以便我可以修改格式。

您可以这样做来查找介于两者之间的文本:

        string test = "ESC[36m SOME LOG CONTENT ESC[0m Some more text";
        int FirstIndex =  test.IndexOf("ESC[36") + 7;            
        test = test.Substring(FirstIndex,(test.Length-(FirstIndex+1)));
        int LastIndex = test.IndexOf("ESC[0");
        test = test.Substring(0, LastIndex);

您可以这样做来查找介于以下两者之间的文本:

        string test = "ESC[36m SOME LOG CONTENT ESC[0m Some more text";
        int FirstIndex =  test.IndexOf("ESC[36") + 7;            
        test = test.Substring(FirstIndex,(test.Length-(FirstIndex+1)));
        int LastIndex = test.IndexOf("ESC[0");
        test = test.Substring(0, LastIndex);

尝试使用正则表达式。这应该可以做到

rtb.Text = "previous text ESC[36m SOME LOG CONTENT ESC[0m Some more text";

Regex regex = new Regex(@"ESC\[36m(.*?)ESC\[0m", RegexOptions.Multiline);
foreach (Match m in regex.Matches(rtb.Text))
{
    rtb.Select(m.Index + 7, m.Value.Length - 13);
    rtb.SelectionColor = Color.Aqua;
}

尝试使用正则表达式。这应该可以做到

rtb.Text = "previous text ESC[36m SOME LOG CONTENT ESC[0m Some more text";

Regex regex = new Regex(@"ESC\[36m(.*?)ESC\[0m", RegexOptions.Multiline);
foreach (Match m in regex.Matches(rtb.Text))
{
    rtb.Select(m.Index + 7, m.Value.Length - 13);
    rtb.SelectionColor = Color.Aqua;
}

我最近遇到了一个非常类似的情况,最终使用了WebBrowser控件。这将使您对字体、颜色等有更多的控制。另外,可以很容易地使其看起来完全像RichTextBox。有很多示例可以在StackOverflow上的两个字符串之间找到字符串。示例//所有这些示例都返回f两个字符串之间的字符串。我需要选择TextRange。我最近遇到了非常类似的情况,最终使用了WebBrowser控件。这将使您对字体、颜色等有更多的控制。此外,还可以轻松地使其看起来完全像RichTextBox。有很多在两个字符串之间查找字符串的示例在StackOverflow.Examples//所有这些示例返回两个字符串之间找到的字符串。我需要选择TextRange。