質問
Notepad ++を使用して、5453行の言語ファイルでテキストの置換を行います。ファイルの行の形式は次のとおりです。
variable.name = Variable Value Over Here, that''s for sure, Really
二重アポストロフィは意図的なものです。
値をセンテンスケースに変換する必要がありますが、「ここ」という単語は例外です。および「本当に」適切であり、大文字のままにしておく必要があります。ご覧のように、通常、値内の大文字と小文字は最初から混在しています。
私はこれに少しの間取り組んできました。これまでのところ、私が持っているのは:
(. )([A-Z])(.+)
少なくとも適切な文字列を選択しているようです。交換ピースは私が苦労しているところです。
解決
正規表現の置換では、一致に対して関数(大文字など)を実行できません。スクリプトを作成する必要があります。 PHPまたはJavaScriptで。
更新: ジョナスの答えを参照してください。
自分でテキストユーティリティというWebページを作成しましたそのようなこと:
- テキストを貼り付ける
- "検索、正規表現&置換" (または Ctrl + Shift + F を押します)
- 正規表現を入力します(
^(。*?\ = \ s * \ w)(。*)$
) - 「^ $一致する行の制限」を確認します;オプション
- 「一致するJS関数を適用」"を選択
- 引数の追加(最初は一致、次にサブパターン)、ここでは
s、start、rest
- returnステートメントを
return start + rest.toLowerCase();
に変更します
テキスト領域の最終機能は次のようになります。
return function (s, start, rest) {
return start + rest.toLowerCase();
};
「本当に」などの単語を大文字にするコードを追加することもできます。および"ここ"。
他のヒント
Find: (. )([A-Z])(.+)
Replace: \1\U\2\L\3
Notepad ++ 6.0以降( PCRE サポートが組み込まれています)。
Notepad ++では、PythonScriptというプラグインを使用してジョブを実行できます。プラグインをインストールする場合、次のような新しいスクリプトを作成します。
その後、次のスクリプトを使用して、必要に応じて正規表現と関数変数を置き換えることができます。
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スクリプト" Conext-Help" 'editor'オブジェクトの下で定義されたpymlsearch / pymlreplace関数を含む、提供されるすべての関数について説明しています。
スクリプトを実行する準備ができたら、最初に実行するファイルに移動してから、「スクリプト>」に移動します。 Python Scriptメニューで実行します。
注:混乱した場合はおそらくnotepad ++の元に戻す機能を使用できますが、動作を確認するために最初に別のファイルにテキストを配置することをお勧めします。
PS notepad ++に組み込まれている検索ダイアログを使用して、正規表現のすべての出現を「検索」および「マーク」できます。すべてを選択できる場合は、TextFXの「文字->大文字」を使用できます。この特定の問題に対する機能ですが、マークされたテキストまたは見つかったテキストから選択されたテキストに移動する方法がわかりません。しかし、私は誰かがそうする場合にこれを投稿すると思った...
編集: Notepad ++ 6.0以降では、「PCRE(Perl Compatible Regular Expression)Search / Replace」を使用できます。 (ソース: http://sourceforge.net/apps/mediawiki/notepad- plus /?title = Regular_Expressions )このため、(。)([Az])(。+)
のような正規表現と \ 1のような置換引数を使用して解決できたはずです。 \ U \ 2 \ 3
。
質問者は非常に具体的なケースを念頭に置いていました。 一般的な「文例の変更」としてメモ帳++ 最初の正規表現の提案は私にとって適切に機能しませんでした。 完璧ではありませんが、ここに調整されたバージョンがあります 私の目的のために元の大きな改善でした:
find: ([\.\r\n][ ]*)([A-Za-z\r])([^\.^\r^\n]+)
replace: \1\U\2\L\3
小文字の名詞、名前、日付、国などにはまだ問題がありますが、適切なスペルチェッカーが役立ちます。