Word 2010 で正規表現の検索/置換を構築する方法

Word 2010 で正規表現の検索/置換を構築する方法

私は基本的な JavaScript 正規表現について多少の経験があり、それを使用してユーザー データ エントリをいくつか操作してきました。しかし、今度は MS Word 2010 ドキュメントの操作について質問を受けました。

具体的には、ユーザーは次のような長い数値データのリストを受け取ります。

1. blah blah 'car' blah blah
2. blah blah 'truck' blah blah
3. blah blah 'boat' blah blah

これはフォーマットされていないプレーンな Word 文書です。各数字の後に、一重引用符で囲まれた項目に基づいてフォーマットされたヘッダーを付けたいと考えています。

1. CAR: blah blah 'car' blah blah
2. TRUCK: blah blah 'truck' blah blah
3. BOAT: blah blah 'boat' blah blah

現在、これらの変更を手動で行う転写担当者がいます (間違いがある場合もあります)。JavaScript/jQuery を使用すると、このデータを取得し、引用符で囲まれた単語を検索し、一致した単語の前に最も近い数字を見つけて、ピリオドの後にすべて大文字のバージョンを挿入するコードを記述できます。

しかし、Word の同様の機能についてはあまり経験がありません。マクロや何らかのスクリプトを使用してこれを行うことはできますか? JavaScript/jQuery コードを記述して、何らかの方法で Word インスタンスで実行することは可能ですか?

ご指導ありがとうございました!

答え1

.docmはい。Microsoft Office VBA は、正規表現検索をネイティブにサポートしています。正規表現コードを配置する、などの各ファイルに対して、VBA エディターで「Microsoft VBScript Regular Expressions 5.5」を参照として追加する必要があります.xlsm

VBA スニップ

この正規表現モジュールのオブジェクトモデルのほとんどはMSDNで見つかります。ここ欠けていると思われるものの一つは設定ですMultiLine

次のように使用します。

  • 新しい正規表現オブジェクトをインスタンス化するDim rx as New RegExp
  • 必要に応じてrx.Global、、、rx.MultiLineフラグを設定しますrx.IgnoreCase
  • 適切なパターン文字列を割り当ててパターンを定義します。rx.Pattern
  • 何かが正規表現に一致するかどうかを知りたい場合は、 を使用してください。rx.Test(str)これは適切にまたはTrueを返します。False
  • 呼び出しは、0から始まる0個以上のオブジェクトの1次元配列のように動作するオブジェクトrx.Execute(str)を返します。MatchCollectionMatch
  • MatchオブジェクトはFirstIndex、、、およびプロパティLengthを公開します。 ValueSubMatches
    • FirstIndexstr一致が見つかった場所の最初の文字のゼロベースのインデックスです
    • Length一致した部分の長さですstr
    • Value一致した文字列の結果
    • SubMatchesゼロベースの配列であるサブマッチグループ試合全体の中で
      • 残念ながら、Office VBA 正規表現は、Python などの名前付きグループをサポートしていないため、グループ インデックスを目的のパターンの一部と一致させるには試行錯誤が必要になる場合があります。

スタイルの置換インプレース操作を実行する方法はないと思いますsed。これは検索のみの機能です。ただし、周囲の VBA を使用して結果を必要に応じて操作するのは簡単です。

答え2

もしそれが Word 文書内の単なるプレーンテキストで、それほど大きくなく、jQuery に精通しているなら、Word 文書をコピー/貼り付けできるシンプルなサイトを作成し、必要な変更を加えて、変換された Word 文書をダウンロードしたり、必要なテキストを出力したりすることができます。これが良い解決策であるかどうかは、状況の詳細によって大きく異なります。

マクロもおそらく実行可能ですが、ユーザーの数によってはユーザーに展開するのが難しい場合があります。

答え3

VBA または Python スクリプトに精通しておらず、@hBy2Py の回答のアイデアが自分の能力に合わない場合は、GoogleSheets/Excel を使用してアルゴリズムを実装する回避策を試してください。

  1. フォーマットされていないプレーンな word=txt ドキュメントを G'Sheet にアップロードしてインポートします。リストが列 A にあるとします。
  2. 列Bに、引用符で囲んだ単語にREGEXEXTRACTを使用し、その単語を大文字にするネストされた数式をすべての列に記述します。=ARRAYFORMULA(UPPER(REGEXEXTRACT(A:A;"\'([a-z]+)")))
  3. ...または別の列 C を作成してその単語を大文字にします。=UPPER(B:B)
  4. 列C(またはD)で、大文字の単語を含む新しいリストを結合します(これを行うには、分割/連結または単に=ARRAYFORMULA(REGEXREPLACE(A:A;"\.(\s)";". "&B:B&": "))

要約:

=ARRAYFORMULA(REGEXREPLACE(A:A;"\.(\s)";". "&UPPER(REGEXEXTRACT(A:A;"\'([a-z]+)"))&": "))

他の回避策としては、ここで説明するソリューションを使用することもできます。Notepad++でワイルドカード/正規表現を使用して検索と置換を行う

関連情報