捕获多行文本

时间:2017-03-06 14:42:48

标签: c# regex wpf

我有txt个文件,其中每条新闻都以

开头
* This is new title *
this is the body 
thid is the body
....
* This is another title *

用户从ListBox选择他想要的标题(双击)。我希望我的程序再次检查文件并选择两个标题之间的文本(所选新闻的正文)。

这是我目前的功能,但它唯一的做法是将标题从ListBox添加到TextBox(新身体应该在哪里)。

感谢您的帮助。

private void listBox_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
    string text = listBox.SelectedItem.ToString();
    List<string> myList = new List<string>();
    string tempLineValue;
    string txtFile = path.Text; //path is TextBox with file path
    Regex regex = new Regex(@text + "(.*)", RegexOptions.Singleline);

    using (StreamReader inputReader = new StreamReader(txtFile))
    {
        while (null != (tempLineValue = inputReader.ReadLine()))
        {
            if (regex.Match(tempLineValue).Success)
            {
                myList.Add((regex.Match(tempLineValue)).Value);
            }
        }
    }
    for (int i = 0; i < myList.Count; i++)
    {
        textBox.Text = myList.ElementAt(i);
    }
}

2 个答案:

答案 0 :(得分:1)

您希望根据文件中的标题获取新闻正文。通过逐行读取文件是不可能的。你必须阅读完整的文件。之后,您可以尝试正则表达式搜索并获取您的新闻机构。我写了一个Regex example来根据标题搜索你的新闻机构。我也测试了它C#,它对我有用。您可以尝试以下代码。

CODE:

string text = " This is new title ";
string txtFile = @"D:\New Text Document.txt"; //path is TextBox with file path
Regex regex = new Regex(@"\*" + text + @"\*(\t|\n|\r|\s)+(.*)(\t|\n|\r|\s)+(.*)(\t|\n|\r)+\*", RegexOptions.Multiline);

using (StreamReader inputReader = new StreamReader(txtFile))
{
    string txt = inputReader.ReadToEnd();
    Match match = regex.Match(txt);
    richTextBox1.Text = match.Value.Replace("*" + text + "*", "").Replace("*", "");
}

输出:

enter image description here

答案 1 :(得分:0)

试试这个:

private void listBox_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
    string text = listBox.SelectedItem.ToString();
    string tempLineValue;
    string txtFile = path.Text; //path is TextBox with file path

    string title = null;
    using (StreamReader inputReader = new StreamReader(txtFile))
    {
        while (null != (tempLineValue = inputReader.ReadLine()))
        {
            if (tempLineValue.StartsWith("*"))
                title = tempLineValue.Substring(2, tempLineValue.Length - 4).Trim();
            else if (text == title)
                textBox.Text += tempLineValue + Environment.NewLine;
        }
    }
}

它应该工作,前提是text(listBox.SelectedItem)变量的值为例如&#34;这是新标题&#34;没有*&#39; s。