2016-04-05 9 views
0

Ich benutze DocX-Bibliothek, um Text in Word-Dokument zu ersetzen. Ich möchte irgendwie alle Zeichenfolgen zwischen "[]" in meiner Vorlage docx finden, zum Beispiel [Name], [Nachname], [Datum] etc ... und ersetze sie durch Werte, die ich zuvor in Datagridview geladen habe, die dieselbe Spalte haben Name (Name, Nachname, Datum). Hier ist, was ich bisher:C# alle Zeichenfolgen zwischen zwei Zeichen innerhalb des Word-Dokuments finden

foreach (DataGridViewRow dataGridViewRow in list) 
{ 
    try 
    { 
     string template = txtUcitajTemplate.Text; 
     string text2 = "Aneksi"; 
     if (!System.IO.Directory.Exists(text2)) 
     { 
      System.IO.Directory.CreateDirectory(text2); 
     } 
     string path = string.Format("{0}.docx", dataGridViewRow.Cells["Name"].Value.ToString()); 
     string path2 = System.IO.Path.Combine(text2, path); 

     using (DocX document = DocX.Load(template)) 
     { 
      string patternstart = Regex.Escape("["); 
      string patternend = Regex.Escape("]"); 
      string regexexpr = patternstart + @"(.*?)" + patternend; 
      // document.ReplaceText(regexexpr, dataGridViewRow.Cells[0].Value.ToString()); 
      // document.ReplaceText(regexexpr, dataGridViewRow.Cells[1].Value.ToString()); 
      var regex = new regex("[.*?]"); 
      var matches = regex.matches(input); //your matches: name, [email protected] 
      foreach (var match in matches) // e.g. you can loop through your matches like this 
      { 
       document.ReplaceText(match.ToString(), dataGridViewRow.Cells["Name"].Value.ToString()); 
       document.ReplaceText(match.ToString(), dataGridViewRow.Cells["LastName"].Value.ToString()); 
      } 
      document.SaveAs(path2);      
     } 
    } 
    catch (System.Exception ex) 
    { 
     MessageBox.Show(ex.Message); 
    } 
} 
+0

Und was ist die Frage? Irgendein Fehler? Problem? Unerwartete Ergebnisse? – HimBromBeere

+0

Sorry, ich bin mir nicht sicher, was ich in regex.matches (Eingabe) eingeben soll, um Lochdokument zu suchen und alle Zeichenfolgen zwischen [] – dilesko

Antwort

0

Versuchen Sie, Ihren regulären Ausdruck zu ändern, es sieht aus wie diese Frage hier ist im Grunde das gleiche tun Sie versuchen, (in Bezug auf die Werte zwischen zwei Zeichen zu finden).

Regular Expression to find a string included between two characters while EXCLUDING the delimiters

Wenn Sie diese Prämisse verwenden dann durch alle Spiele durchlaufen. Ich vermute, dass Sie Ihren Code ändern können, um das zu tun, was Sie erreichen möchten.

+0

zu finden, was soll meine Eingabe für die Suche sein, in Regex.Matches (Eingabe)? – dilesko

0

Hier ist Ihr Problem:

var regex = new regex("[.*?]"); 

See your RegEx here

Sie sind alle Zeichen Ihnen passende [] zwischen den Klammern gesetzt haben, was bedeutet, Ihre RegEx werden nur die Zeichen übereinstimmen ., * und ? wahrsten Sinne des Wortes .

Was Sie tun müssen, ist, diese Klammern zu entkommen:

\[.*?\] 

See it working here

Verwandte Themen