私は最近キリル文字の仕事を始めましたが、本当に難しいです。
私はそれを使用するために私のPythonスクリプトを取得できません。私は前に試しました。
PHPはうまくいきますが、PHPを知りません。やっと何かをまとめましたが、まだ心が楽ではありませんでした。 (しかし、驚くほど有用であることが証明されているので、主流になることができます。)
もちろんgrep
これは不可能です。
それともそうでしょうか?
これがこの質問の目的です。
私はこれをしたい:
alec@ROOROO:~/$ grep '\w\{4\}' cyrillicstuff
...そして手ぶらで去った。
しかし、すべてがキリル文字なので、良い'ol grepを使用して4文字以上のすべての単語を返す方法はありますか?
答え1
Unicodeベースの文字クラスを使用する必要があると思います。単語文字のロケール認識クラスは[:alnum:]
文字クラス内で使用されるため、コマンドは次のようになります。
grep '[[:alnum:]]\{4\}' cyrillicstuff
そして、ロケールがファイルが実際に使用するエンコーディングに設定されていることを確認してください。locale
コマンドを使用して、LC_CTYPE
カテゴリに指定された値を調べて見つけることができます。
この構文は、POSIXネイティブまたは拡張正規表現(sed、awkなど)を使用するすべてのツール、およびPythonおよびPHPで使用されるPerlおよび「Perl互換正規表現」でサポートされています。 perlと「perl互換正規表現」には追加の構文が\pX
あります\p{xxx}
。ここでX
、xxx
またははUnicodeカテゴリ名であるため、と同じで、\pL
同じで[:alpha:]
なけれ\p{Uppercase}
ばなりません[:upper:]
。すべてのUnicodeカテゴリが利用可能である必要があります。
広告Python。 PythonはUnicodeも完全にサポートしています。すぐに動作する必要があるPython 3では、ロケールエンコーディングでファイルを開くことがデフォルトであるようです(ただし、テストせずに確認しました)。ただし、Python 2ではエンコードを手動で指定する必要があります。 stdin、stdout、stderrに設定する必要がありますが、他のすべてのファイルにはこのcodecs.open
関数を使用する必要があります。ここでインポートするエンコーディングを指定しますlocale.getpreferredencoding()
。locale.setlocale(locale.LC_ALL, '')