正規表現によるテキストの検索と置換

はじめに


確かに、最も高度なPCユーザーでなくても、行を検索してテキストに置き換えることができます。 一般的な場合、置換する行と置換する行を指定する必要があります。 これは、最も単純な目標を達成するのに十分です。 しかし、場合によっては、単に置換するだけでなく、たとえば線の構造を変更するなど、さらに多くの機能が必要になることがあります。



より難しい目標


私の仕事の過程で遭遇した問題を考えてください。 この例は、現在のトピックの本質を十分に明らかにしているように思えます。



そのため、ソフトウェア開発の過程で、データベーステーブルに大量のレコードを追加する必要がありました。 テーブルの構造は次のとおりです。



画像



ソースデータとして、次の形式のテキストファイルが提示されました。



FirstBackordered = 38,





SecondBackordered = 39,





ThirdBackordered = 40,





FirstCreditCardDeclined = 41,





SecondCreditCardDeclined = 42,





ThirdCreditCardDeclined = 43,





FirstPayPalDeclined = 44,





SecondPayPalDeclined = 45,





ThirdPayPalDeclined = 46,





FirstDeclinedCreditCardBackordered = 47,





SecondDeclinedCreditCardBackordered = 48,





ThirdDeclinedCreditCardBackordered = 49,





FirstDeclinedPayPalBackordered = 50,





SecondDeclinedPayPalBackordered = 51,





ThirdDeclinedPayPalBackordered = 52







列挙型からの抜粋のようですね。 このようなテーブルにいくつかのエントリを追加することは難しくありません。 そして、そのような記録が1000以上ある場合はどうなりますか? 同意し、それぞれを手動で追加することはまったく望みがありません。 さらに、テーブルはローカルと顧客のテストサーバーの両方で(そして将来的にはライブサーバーでも)更新する必要がありました。 したがって、SQLスクリプトを作成することをお勧めします。 そして、あなたは私のためにテキストエディタにそれを書くことができます!



目的


そのため、タスクは、ソーステキストの各行を、目的のテーブルへのINSERT書き込みを実行するSQLクエリに変換することです。 例:



FirstBackordered = 38,







以下に変換する必要があります。



 insert into [LPEmail].[dbo].[EMAIL_TYPE] values ( 38, 'FirstBackordered', 'D:\Websites\LeisurePro\XslFiles\LP_BO\FirstBackordered.xslt', 'D:\Websites\LeisurePro\XslFiles\LP_BO\FirstBackordered.xslt', 1, 1 );
      
      







これは、Notepad ++、Visual Studio、SQL Management Studioなど、正規表現の検索と置換をサポートするテキストエディターで実行できます。正規表現の形式はプログラムによって異なる場合があります。 この記事では、Microsoftソフトウェア製品のテキストの検索と置換について説明します。



解決策


したがって、ソーステキストファイル内の文字列を検索するための正規表現を作成しましょう。



^{:w}:Zs:Sm:Zs{:d:d},*$







^-行の始まり。 検索が実行されるテキストの行の先頭にある場合にのみ、エントリに一致します。

:w-文字のストリング。 式と一致します([a-zA-Z] +);

:Zs-スペースに一致します。

:Sm-数学記号。 +、=、〜、|、<and>に一致します。

:d-10進数。 式([0-9])と一致します。

$-行の終わり。 検索が実行されるテキストの行の末尾にある場合にのみ、エントリに一致します。



検索および置換モードでは、タグ付き式に中括弧({})が使用されます。 この正規表現は、ソーステキストファイル内の各行を検索します。 タグを使用して、名前(例:FirstBackordered)と番号(38)を作成しました。 中括弧内の式は、「置換」フィールドで使用できます-\ 1、\ 2、\ 3など。 見つかった行を置き換える式を書きましょう。



insert into [LPEmail].[dbo].[EMAIL_TYPE]\nvalues (\n\t\2, '\1', 'D:\\Websites\\LeisurePro\\XslFiles\\LP_BO\\\1.xslt', 'D:\\Websites\\LeisurePro\\XslFiles\\LP_BO\\\1.xslt', 0, 1\n);







ご覧のとおり、\ 1と\ 2のタグが複数回使用されています。 これらのタグは、正規表現によって文字列で見つかった実際の部分文字列に置き換えられます。



おわりに


その結果、「すべて置換」ボタンを押すことで、多くの時間を節約し、自己壮大さの感覚を高めます:D



画像



ご清聴ありがとうございました。 誰かが退屈なパイプライン作業を回避できるように願っています。



All Articles