私は RegEx にかなり詳しいのですが、それがどのように機能するのか理解できないことが 1 つあります。
NotePad++ で検索/置換を行い、入力が柔軟でありながら出力の長さが固定であることを確認するにはどうすればよいですか?
たとえば、これに正規表現を適用すると、次23-6-2016
のようになります: 23-06-2016
(06 の場合は 0 が追加されますが、たとえば 12 の場合は追加されません)
別のオプションとしては、以下を作成することです。
TestString
そして、(余分なスペース) (余分なスペース)Test
になります。
TestString______________________
Test____________________________
もちろん、ここでの考え方は、出力がすべて同じ長さになる大量検索/置換を実行することです。
その背景にある考えを説明してください。
編集: 私が扱っているデータの概要を示すために、処理する必要がある行の例を次に示します。
12345678 TXT 19700101 0 100 20160624 100 Comment text
12345678 TXT 19700101 100 100,25 20160624 0,25 Comment text
12345678 TXT 19700101 100,25 100,5 20160624 0,25 Comment text
これらはタブで区切られていることに注意してください。最初の行の最初の 0 は 0,00、100 は 100,00 とフォーマットする必要がありますが、12345678 と日付は ,00 でフォーマットしないでください。最後の 100,5 は 100,50 とフォーマットする必要があります。
日付に関することは回避できたので、今のところそれはそれほど重要ではありません。
答え1
回答:
12345678 TXT 19700101 0 100 20160624 100 コメントテキスト 12345678 TXT 19700101 100 100,25 20160624 0,25 コメントテキスト 12345678 TXT 19700101 100,25 100,5 20160624 0,25 コメントテキスト
4列目:
^((?:\S+\s+){3}\d+)(\s)
〜\1,0\2
^((?:\S+\s+){3}\d+,\d)(\s)
〜\10\2
5列目/7列目:上記と同様ですが、ルール内の/をそれぞれ
置き換えてください。{3}
{4}
{6}
の第一ルール,0
のない数字に を追加します,
。これで、すべての数字に が含まれるようになります,\d
。
の2番目のルール0
カンマの後に数字が 1 桁のものにa を追加します。
はどうかと言うと(?:)
:非キャプチャグループ前の列はすでにキャプチャされているため\1
、追加のキャプチャは不要です。
これは数値を小数点第 2 位までしか埋めません。任意の量を埋めるには、pad excessively, then trim
アプローチを使用します。
最後に一言?
私の意見では、notepad++ のような単純な正規表現はこのタスクには不十分です。bash や perl のような基本的なスクリプトを使用すれば、はるかに読みやすく処理できるでしょう。
答え2
セクションA: 特定の長さのパッド
正規表現を使用して行の右側に N 文字を埋め込むには、行末に N 個のスペースを追加し、最初の N 文字をグループ化して残りの文字を置き換えます。
パス1: パディング文字を追加する
検索:$
置換:______________________________
行末に 30 個のスペースを追加します。(スペースは投稿上でフォーマットされないため、アンダースコアを使用しました)。
パス2: 左30文字をトリム
行の先頭にダッシュで区切られた日付を埋め込むには、各セクションをそれに応じて一致させます。
検索:^([[:print:]]{0,30}).*$
置換\1
行の先頭で、最大 30 文字の印刷可能な文字のグループを置き換え、その後に続く残りの文字をそのグループに置き換えます。
異なる行の長さを選択するには、パス 1 で n スペースを使用し、パス 2 で 30 を長さに置き換えます。
セクション B: 日付で始まる行
パス 1 (月日):
検索対象:^([0-9])-
置換対象:0\1-
パターン (1 桁の数字で始まり、その後にダッシュが続く行) を、埋め込まれたゼロ、数字、およびダッシュに置き換えます。
パス2(月):
検索対象:-([0-9])-
置換対象:-0\1-
パターン (2 つのダッシュの間にある 1 つの数字) を、ダッシュ、埋め込まれたゼロ、数字、およびダッシュに置き換えます。