web-dev-qa-db-ja.com

正規表現を使用して開始する行を検索する

Notepad ++で正規表現を使用して行を検索する

Div内のすべてのjQuery「done」属性から4000行のHTMLファイルを削除したいと思います。

<DIV class=menu done27="1" done26="0"
done9="1" done8="0" done7="1"
done6="0" done4="20">

次のように置き換える必要があります。

<DIV class=menu>

この実験 この正規表現でそれを行うことができます:

[ ^]done[0-9]+="[0-9]+"

Notepad ++ 5.6.8 Unicodeを使用し、ANSIでエンコードされたファイルを使用して、この正規表現を[検索対象]フィールドに入力します。スペースで始まる5つのオカレンスを置き換えるだけで、行の先頭から始まる2つのオカレンスを見逃します。

キーワードで始まるHTML要素のすべての属性を削除する正規表現を作成するにはどうすればよいですか?

16
Michel Merlin

拡張「\ n」を「LINEBREAK」に置き換えます

これらのタイムリーな返信をありがとうございました。あなたのアドバイスに従って、これが私がしたことです:

  • 「メモ帳++>表示>記号の表示>行末の表示」は、各行末に「CR + LF」を表示します。
  • "Notepad ++> Search> Find"、 "Search mode" = "Normal"、 "Find what" = "LINEBREAK"が何も検出しないことを確認しました
  • "検索モード" = "拡張"、 "検索対象" = "\ n\r"はダブルブレークのみを検索します(CR + LF = +空白行); "\ n\r"は何も検出しませんが、 "\ n"はすべての改行を正確に検出し、それらのみを検出します。
  • Savingmy "Towncar.htm" test file as "Towncar_02.htm "(ANSIでもエンコードされています)
  • 「拡張」の下で、すべての「\ n」を「LINEBREAK」に置き換えました(末尾のスペースに注意してください)
  • 「正規表現」の下で、次の各オカレンスを置き換えました。

     done[0-9]*="[0-9]*"
    

「完了する」前に見出しスペースがあることを確認するように注意してください
そしてトレーリングスペースがありません!以下を参照)

空の文字列

  • 「拡張」の下で、「LINEBREAK」の各出現箇所を「\ n」に置き換えました(今回は「LINEBREAK」の後に末尾のスペースがありません!)
  • 結果の「Towncar.htm」ファイル(数回の外観の再フォーマット後)が正常できれいに見え、更新後も「Towncar_02.htm」バックアップと同じようにレンダリングされることを確認しました。

リコールとメモ:

  • このフォーラムは明らかにChrome 4;ですが、一部のブラウザ(IE6やその他の廃止されたブラウザ)では、状況によってはアーティファクトが発生するため、注意が必要です。
  • フォーラムにブラウザに表示されない場合でも、isという見出しスペースがあります。 Regexのbeginning(上記の「done ...」正規表現)とinsideで、only「done」で始まり、開始スペースが含まれる文字列。したがって、「undone」や「methadone」などで最終的に他の文字列を変更しないようにします。
  • 同様に、フォーラムにブラウザに表示されている場合でも、末尾にスペースがありません正規表現の終わり!
  • 正規表現では、[0-9]は1桁の10進数(0-9の範囲の文字)の1つだけに一致します。 IOWは、"0"または"1"または"9"などに一致しますが、"01"または"835"または""(空の文字列)などには一致しません。
  • *(アスタリスク)は前の文字の0回以上に一致します(ここでは、空の文字列または数字のみで構成された文字列に一致します)
  • 同様に、+(プラス記号)は前の文字の1倍以上に一致します(ここでは、数字のみで構成された、少なくとも1文字の長さの任意の文字列に一致します)
    参照: http://sourceforge.net/apps/mediawiki/notepad-plus/index.php?title=Regular_Expressions#Notepad.2B.2B_regex_syntax
13
Michel Merlin

簡単な方法は次のとおりです。

  1. 「検索」と「置換」に移動
  2. 「検索対象」に「\ n」を入力
  3. 「置換」に文字列を入力します
  4. 「検索モード」で「拡張」を選択します
  5. 「すべて置換」をクリックします

最初の行を除く各行の先頭で文字列をプラグインします。

1
John

私もNotepad ++が好きですが、やり直しは本当に苦痛です。 Notepad ++の使用を主張する場合は、次のことを試してください。

  • まず、ドキュメントで使用されている改行文字を確認します([表示]> [記号を表示]> [行末を表示])
  • これらの改行を1つのスペースに置き換えて削除します(検索して置き換えます。CRは\ r LFは\ nです。必ず「拡張」検索モードにチェックマークを付けてください)
  • 正規表現-置換done[0-9][0-9]*=\"[0-9][0-9]*\"空の文字列を使用(正規表現の前に必ず1つのスペースを入れてください)

出来上がり!あまりきれいではありませんが、動作します; o)

その後、人間が読める形式にしたい場合は、HTMLTidy関数を使用できます。

1
das_weezul

あなたはほとんどそれを持っていました!残念ながら、Notepad ++の完全なソリューションは3ステップのプロセスである必要があります。

  1. 正規表現の検索/次の検索に置き換えます:\<done[0-9]+="[0-9]+"[ ]*もちろん、replaceフィールドは空のままにして、一致するものをすべて削除するだけです。 (Notepad ++では正規表現の理解\<は「単語の始まり」を表します。)

  2. 以前の検索/置換の影響を受けるテキストの部分を選択します。ドキュメント全体を選択する必要はありません。

  3. 改行を削除します。 Ctrl-Fを押して[検索/置換]ダイアログを再度表示し、今度は[正規表現]ではなく[拡張]検索モードを選択します。ドキュメントの形式に応じて、次のいずれかを検索します\nまたは\r\n。ここでも、置換フィールドは空である必要があります。また、「選択中」チェックボックスがチェックされていることを確認してください。

「すべて置換」をクリックすると完了です。

0
kurige

恐れ入りますが、Notepad ++ Regexではそれができません

Scintilla正規表現エンジンを使用するNotepad ++は、行ごとに基づいているため、複数行の検索/置換は実行できません。

Scintillaでは、正規表現の検索は1行ごとに行われるため(行末の文字が削除されるため)、\ rと\ nが一致することはありません。

http://www.scintilla.org/SciTERegEx.html から引用

0
YOU