webdevqa.jp.net

判例に変更する正規表現

Notepad ++を使用して、5453行の言語ファイルでテキストを置換しています。ファイルの行の形式は次のとおりです。

variable.name = Variable Value Over Here, that''s for sure, Really

二重アポストロフィは意図的なものです。

値を大文字に変換する必要があります。ただし、「ここ」と「本当に」という単語は適切であり、大文字のままにしておく必要があります。ご覧のとおり、通常、値内の大文字と小文字は混在しています。

私はしばらくこれに取り組んできました。私がこれまでに持っているすべては:

 (. )([A-Z])(.+)

少なくとも適切な文字列を選択するようです。交換部品は私が苦労しているところです。

40
jkramp

正規表現の置換では、一致に対して(大文字と同様に)関数を実行できません。あなたはそれをスクリプト化する必要があります、例えば。 PHPまたはJavaScript。

更新:Jonasの回答 を参照してください。

私は Text Utilities というWebページを自分で作成して、そのようなことを行いました。

  • テキストを貼り付けます
  • 「検索、正規表現、置換」に進む(または Ctrl+Shift+F
  • あなたの正規表現を入力してください(私のものは^(.*?\=\s*\w)(.*)$になります)
  • 「^ $マッチラインの制限」オプションをチェックします
  • 「JS関数を一致に適用」を選択します
  • 引数を追加します(最初は一致、次にサブパターン)。ここでは_s, start, rest_
  • returnステートメントをreturn start + rest.toLowerCase();に変更します

テキスト領域の最後の関数は次のようになります。

_return function (s, start, rest) {
     return start + rest.toLowerCase();
};
_

「Really」や「Here」などの単語を大文字にするコードを追加するかもしれません。

13
instanceof me
Find:    (. )([A-Z])(.+)
Replace: \1\U\2\L\3

Notepad ++ 6.0以降(組み込み [〜#〜] pcre [〜#〜] サポートに付属)。

158
Jonas Byström

Notepad ++では、PythonScriptというプラグインを使用して作業を行うことができます。プラグインをインストールする場合は、次のように新しいスクリプトを作成します。

enter image description here

次に、次のスクリプトを使用して、必要に応じて正規表現変数と関数変数を置き換えます。

import re

#change these
regex = r"[a-z]+sym"
function = str.upper

def perLine(line, num, total):
for match in re.finditer(regex, line):
    if match:
        s, e = match.start(), match.end()
        line = line[:s] + function(line[s:e]) + line[e:]
        editor.replaceWholeLine(num, line)

editor.forEachLine(perLine)

この特定の例は、特定の行ですべての一致を検索し、各一致ごとに関数を適用することで機能します。複数行のサポートが必要な場合、Python Script "Conext-Help"は、「editor」オブジェクトで定義されたpymlsearch/pymlreplace関数を含む、提供されるすべての関数を説明します。

スクリプトを実行する準備ができたら、最初に実行するファイルに移動し、次にPythonスクリプトメニュー)の[スクリプト]に移動して、スクリプトを実行します。

注:失敗した場合は、おそらくnotepad ++の取り消し機能を使用できますが、最初にテキストを別のファイルに置くことをお勧めします動作することを確認します。

追伸Notepad ++の組み込みの検索ダイアログを使用して、正規表現のすべての出現を「検出」および「マーク」できます。それらをすべて選択できれば、この特定の問題に対してTextFXの「文字->大文字」機能を使用できますが、私はmマークまたは見つかったテキストから選択したテキストに移動する方法がわからない。しかし、誰かがそうした場合に備えてこれを投稿すると思いました...

編集:Notepad ++ 6.0以降では、「PCRE(Perl互換の正規表現)検索/置換」を使用できます(ソース: http: //sourceforge.net/apps/mediawiki/notepad-plus/?title=Regular_Expressions )したがって、(. )([A-z])(.+)のような正規表現を使用して、\1\U\2\3のような置換引数を使用すると、これを解決できます。

6
atomictom

質問者は非常に具体的なケースを念頭に置いていました。 notepad ++での一般的な「文の大文字小文字の変更」として、最初の正規表現の提案は私には適切に機能しませんでした。完璧ではありませんが、ここでは私の目的のために元のバージョンを大幅に改善した微調整バージョンを示します。

find:    ([\.\r\n][ ]*)([A-Za-z\r])([^\.^\r^\n]+) 
replace: \1\U\2\L\3

小文字の名詞、名前、日付、国などにまだ問題がありますが、優れたスペルチェッカーが役立ちます。

3
hedgehog