このライブラリを使用して、アプリケーションに Word ドキュメントのメールマージを実装しています: http://www.codeproject.com/Articles/38575/Fill-Mergefields-in-docx-Documents-without-Microso
それはうまく機能しますが、コードを大幅にリファクタリングし、自分のアプリケーションに統合するために他のタスクを実行しました。
ライブラリは、次の正規表現を使用して、Word の差し込み印刷フィールドをキャプチャします。
private static readonly Regex _instructionRegEx = new Regex(
@"^[\s]*MERGEFIELD[\s]+(?<name>[#\w]*){1} # This retrieves the field's name (Named Capture Group -> name)
[\s]*(\\\*[\s]+(?<Format>[\w]*){1})? # Retrieves field's format flag (Named Capture Group -> Format)
[\s]*(\\b[\s]+[""]?(?<PreText>[^\\]*){1})? # Retrieves text to display before field data (Named Capture Group -> PreText)
[\s]*(\\f[\s]+[""]?(?<PostText>[^\\]*){1})? # Retrieves text to display after field data (Named Capture Group -> PostText)",
RegexOptions.Compiled | RegexOptions.CultureInvariant | RegexOptions.ExplicitCapture | RegexOptions.IgnoreCase | RegexOptions.IgnorePatternWhitespace | RegexOptions.Singleline
);
これは次のような例をキャプチャMERGEFIELD FieldNameGoesHere
しますが、フィールド名が二重引用符で囲まれている例に出くわしましたがMERGEFIELD "FieldNameGoesHere"
、正規表現はこれらをキャプチャしません。
ご覧のとおり、正規表現は少しハードコアであり、二重引用符を使用するように変更するだけでなく、引用符なしの MERGEFIELD も受け入れるように変更するには、私の現在の正規表現法を超えています。
明らかに最初の行を変更する必要がありますが、正確に変更する方法がわかりません。