2016-09-05 6 views
2

タグ内のテキストを抽出して変換するにはどうすればよいですか?抽出と変形

例:

out formatted

入力:

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

OUT: これはイタリック体である 私は抽出するために、このコードを使用してい

太字テキストテキストはトゥイーンのタグが、問題はそれだけで...私が達成したい何とstackoverflowのエディタで起こるまさに

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); 

} 

大胆に

  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ありがとう –

答えて

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); 
} 

そして、これはあなたが標準のリッチテキストボックスを使用する場合の結果である:もちろん

End result in RichTextBox control

をこれはちょうどです出発点。フォーマットやその他の機能を組み合わせたい場合は、追加する必要があります。 ;)

+0

本当にありがとう、ありがとう。ありがとう –

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

いいですが、どのように書式設定に追加できますか?例:if(tags = txtBold){bold(s1)} –

+0

@KawyllainyVi 'string'オブジェクトには書式設定がありません.WinForms、WPF、およびASP.NETのようなUI Framworksでは書式設定が行われません。私たちがあなたにそれを伝えるためにUIにテキストをどのように表示するかを示す必要があります。 –

+0

私はこの例があなたが私がしようとしているものを視覚化するのに役立つことを願ってhttp://pastebin.com/XcJZ2RAw –

関連する問題