2016-09-05 10 views
2

Как я могу выполнить задачу извлечения текста в тегах и преобразовать их?Извлечение и преобразование

Пример:

out formatted

вход:

[txtItalic]This is italic[/txtItalic] [txtBold] Bold Text [/txtBold] 

Выход: Это наклонный Жирный

Я использую этот код, чтобы извлечь текст будет промежуточные кадры тегов, но проблема заключается в том, что он принимает только текст первого тега

string ExtractString(string s, string tag) 
{ 
    var startTag = "[" + tag + "]"; 
    int startIndex = s.IndexOf(startTag) + startTag.Length; 
    int endIndex = s.IndexOf("[/" + tag + "]", startIndex); 
    return s.Substring(startIndex, endIndex - startIndex); 

} 

То, что я хотел бы сделать, и именно то, что происходит в StackOverflow редактора ...

  richTextBox1.SelectionFont = new Font(richTextBox1.Font, FontStyle.Bold); 

     richTextBox1.AppendText("Bold Text"); 

     richTextBox1.SelectionFont = new Font(richTextBox1.Font, FontStyle.Regular); 

     richTextBox1.AppendText("Normal Text"); 

полужирный текст использование **** и наклонным **

+0

Вы можете прочитать сообщение SO http://stackoverflow.com/questions/7377344/how-to-write-a-parser-in-c «Как написать парсер». Я думаю, что немного исследований в синтаксическом анализе текста поможет вам. – PhillipH

+0

Желаемый результат - это текст плана или ** отформатированный текст **? Потому что, если это последнее, это нечто специфическое для *, где * вы поместите этот текст впоследствии. – Andrew

+0

Win formrs thanks –

ответ

0

Вот способ делать то, что я думаю, что вам нужно:

private void YourMethod() 
{ 
    Process("[txtItalic]This is italic[/txtItalic], this is normal, [txtBold]Bold Text[/txtBold] and now [txtUnderline]Underlined Text[/txtUnderline]. The end."); 
} 

private void Process(string textWithTags) 
{ 
    MatchCollection matches = Regex.Matches(textWithTags, @"\[(\w*)\](.*)\[\/\1\]"); 

    int unformattedStartPosition = 0; 
    int unformattedEndPosition = 0; 
    foreach (Match item in matches) 
    { 
     unformattedEndPosition = textWithTags.IndexOf(item.Value); 

     // Add unformatted text. 
     AddText(textWithTags.Substring(unformattedStartPosition, unformattedEndPosition - unformattedStartPosition), FontStyle.Regular); 

     // Add formatted text. 
     FontStyle style = GetStyle(item.Groups[1]); 
     AddText(item.Groups[2].Value, style); 

     unformattedStartPosition = unformattedEndPosition + item.Value.Length; 
    } 

    AddText(textWithTags.Substring(unformattedStartPosition), FontStyle.Regular); 
} 

private FontStyle GetStyle(Group group) 
{ 
    switch (group.Value) 
    { 
     case "txtItalic": 
      return FontStyle.Italic; 
     case "txtBold": 
      return FontStyle.Bold; 
     case "txtUnderline": 
      return FontStyle.Underline; 
     default: 
      return FontStyle.Regular; 
    } 
} 

private void AddText(string text, FontStyle style) 
{ 
    if (text.Length == 0) 
     return; 

    richTextBox.SelectionFont = new Font(richTextBox.SelectionFont, style); 
    richTextBox.AppendText(text); 
} 

И это результат, если вы используете стандартный RichTextBox:

End result in RichTextBox control

Конечно, это просто отправная точка. Если вы хотите комбинировать форматы или любую другую функцию, вам придется добавить это. ;)

+0

Действительно спасибо, вы помогаете alot ... спасибо –

0

Это должно сделать работу для вас:

string s = "[txtItalic]This is italic[/txtItalic] [txtBold] Bold Text [/txtBold]"; 
//creating a list of tags 
List<string> tags = new List<string>(); 
tags.Add("txtItalic"); 
tags.Add("txtBold"); 
//iterating through each of the tags 
foreach (string tag in tags) 
{ 
    var startTag = "[" + tag + "]"; 
    int startIndex = s.IndexOf(startTag) + startTag.Length; 
    int endIndex = s.IndexOf("[/" + tag + "]", startIndex); 
    string s1 = s.Substring(startIndex, endIndex - startIndex); 
    Console.Write(s1); 
} 

Выход:

Это Курсив Жирный текст

Примечание: Это будет только извлечь текст между тегами.

+0

Прохладный, но как я могу добавить к форматированию? Ex: if (tags = txtBold) {bold (s1)} –

+0

@KawyllainyVi 'string' объекты не имеют форматирования, UI Framworks, такие как WinForms, WPF и ASP.NET. Вам нужно будет показать, как вы показываете текст в пользовательском интерфейсе, чтобы мы вам это говорили. –

+0

Надеюсь, что этот пример поможет вам визуализировать то, что я собираюсь сделать http://pastebin.com/XcJZ2RAw –

 Смежные вопросы

  • Нет связанных вопросов^_^