web-dev-qa-db-ja.com

Notepad ++およびVimで正規表現を使用して大量置換を行う

そのため、次のような大きなテキストファイルがあります。

<option value value='1' >A
<option value value='2' >B
<option value value='3' >C
<option value value='4' >D

それは数百行の長さであり、私は本当にそれを手動でやりたくありません。私が使用しようとしている表現は次のとおりです。

<option value='.{1,}' >

いくつかのオンライン正規表現テスターで実行すると、意図したとおりに機能します。基本的に、A、B、Cなどの前にすべてを削除したいです。問題は、VimとNotepad ++でその式を使用しようとすると、何も見つからないようです。

31
Mike

[〜#〜] a [〜#〜][〜#〜] b [〜#〜][〜#〜]の前のすべてc [〜#〜]など.

それはとても簡単に思えますが、あなたを誤解しているに違いありません。それはただ

:%s/<.*>//
20
Whaledawg

Notepad ++では、このために正規表現を使用する必要はありません。

Altキーを押したままにすると、複数の行にわたってテキストの長方形を一度に選択できます。削除するチャンクを選択し、削除を押します。

63
GlennS

Notepad ++で:

<option value value='1' >A
<option value value='2' >B
<option value value='3' >C
<option value value='4' >D


Find what: (.*)(>)(.)
Replace with: \3

Replace All


A
B
C
D
30
sdgfsdg

問題を理解していない限り、これに対する非常に簡単な解決策があります。次の正規表現:

(.*)(>)(.*)

投稿で指定されたパターンと一致します。

したがって、notepad ++では(.*)(>)(.*)を見つけて、\3に置き換えます。

正規表現は、(.*)を指定すると行全体に一致するという意味で基本的に貪欲であり、何をしたいのかを分解して、保持する文字列を抽出できるようにします。ここでは、まったく同じことを行いましたが、Notepad ++およびEditplus3で正常に動作します。

8
andHapp

元のソリューションには2つの問題があります。まず、サンプルテキスト:

<option value value='1' >A

「値」Wordが2回出現します。あなたの正規表現はそうではありません。また、正規表現の量指定子で開き中括弧をエスケープする必要があります。エスケープしない場合、Vimはそれをリテラル中括弧として解釈します。この正規表現は機能します:

:%s/<option value value='.\{1,}' >//g
7
rmeador

これにより、optionタグが削除され、文字がvimに残ります。

:%s/<option.*>//g
6
xsl

あまり具体的でない場合に役立ちます。そこのあなたの表現は「貪欲」であり、それは異なるプログラムによって異なる方法で解釈されるかもしれません。 vimでこれを試してください:

%s/^<[^>]+>//
4
Lucas Oman

ヴィムで

:%s/<option value='.\{1,}' >//

または

:%s/<option value='.\+' >//

Vimの正規表現では、1つ以上のシンボルをエスケープし、括弧、制限された数値の中括弧などをキャプチャする必要があります。

見る :help /magicエスケープする必要がある特殊文字(およびその変更方法)を確認します。

3
rampion

メモ帳++

サーチ

(<option value="\w\w">)\w+">(.+)

と置換する

\1\2
3

同じ問題(jQueryの "完了..."文字列)がありますが、Notepad ++のみで、良い友好的な返信(私が見逃したことを理解できる)を受け取り、詳細なステップバイを構築するために時間を費やしました-ステップの説明、Notepad ++で正規表現を使用して行を開始する検索

ヴェルサイユ、火曜日2010年4月27日22:53:25 +0200

2
Michel Merlin

メモ帳++:検索モード=正規表現

何を見つける:(。*>)(。)

置換:\ 2

2
Vuttipong L.

少し後ですが、だれにでも役立つ場合は、ここ(sdgfsdgによる)のいずれかの例に従って、メモ帳++の正規表現をすばやく選択することができました。

フォームのHTML選択ドロップダウンオプションのリストから、いくつかの冗長データを同様に引き出す必要がありました。

<select>
  <option value="AC">saint_helena">Ascension Island</option>
  <option value="AD">andorra">Andorra</option>
  <option value="AE">united_arab_emirates">United Arab Emirates</option>
  <option value="AF">afghanistan">Afghanistan</option>:
  ...
</select>

そして、私が本当に欲しかったのは:

<select>
  <option value="AC">Ascension Island</option>
  <option value="AD">Andorra</option>
  <option value="AE">United Arab Emirates</option>
  <option value="AF">Afghanistan</option>
  ...
</select>

髪を引っ張った後、バージョン5.8.5(2010年9月)では、正規表現では特定のループが(別の構文がない限り)まだ許可されていないようであることがわかりました。たとえば、次のようになります。 "> united_arab_emirated_emirates">追加のアンダースコアが追加されているにもかかわらず:

(">)([a-z]+([_]*[a-z]*)*)(">)

このクエリは最も一般的な RegExツール で機能しましたが、Notepad ++内では、はるかにいものを使用して、ネストされたアンダースコアの最大数(残念ながら8)を手動で考慮する必要がありました。

(">)([a-z]+[_]*[a-z]*[_]*[a-z]*[_]*[a-z]*[_]*[a-z]*)[_]*[a-z]*[_]*[a-z]*[_]*[a-z]*[_]*[a-z]*(">)

Notepad ++の置換機能で正規表現ループをシミュレートする方法を誰かが知っている場合は、お知らせください。


検索対象:*( ">)([az] + [_][az][ _][az][_][az][_][az])[_][az][_][az][_] [az][_][az]( ">)*


と置き換え: ">


結果:255件の出現が置換されました。

1
bcmoney

これは動作します。私のvimでテストしました。単一引用符が問題です。

1,$s/^<option value value=['].['] >/
1
J.J.

これは、Notepad ++の正規表現に関する素晴らしい記事です。
http://markantoniou.blogspot.com/2008/06/notepad-how-to-use-regular-expressions.html

1
crowne

Vim:

:%s /.*> //

1
Andreas Kraft

非常に簡単な検索:

<option value value=.*?>

置換をクリックします

0
Ibrahim Akbar