Pythonに使用されているRegExフレーバーを知りたいですか?それはPCRE、Perl互換ですか、それともICUか何か他のものですか?
3 に答える
Perlとの互換性は十分にあるため、ほとんどの Perl 式は変更せずに動作します。Perl との互換性を目指していますが、もちろん、いくつかの小さな違いがあります。
技術的には、独自の正規表現を使用しています。たとえば、名前付きグループは、他の実装が構文を採用するずっと前に、Python 正規表現で提供されていました。また、すぐに使用できる Unicode もサポートしています。最近では、ほとんどの Python 拡張機能が他の場所でサポートされています。http://docs.python.org/library/re.htmlを参照してください
残念ながらコメントに直接お答えすることはできませんが、アトミック ブロックを使用してマルチバイト文字シーケンスを作成できるため、アトミック ブロックは重要な機能です (ただし、その機能を理解している人はほとんどいません)。つまり、Windows では改行は \r\n です。
例: /(?>\r\n|\n|\r)\p{Any}/ は、改行と任意の文字リテラルの組み合わせであるため、\n\r または \r. に一致しますが、 \r\n には一致しません。改行の後には何も続きません。
ここにPythonの正規表現サポートの概要があります。
要約すると:
Pythonの正規表現構文に欠けている唯一の重要な機能は、アトミックグループ化、所有格数量詞、およびUnicodeプロパティです。
アトミックグループ化と所有格数量詞は、言語に多くの表現力を追加しません。これらは基本的に、より単純で高速な正規表現用です。
Unicodeは、Æのようなリテラルのユニコード文字を使用できるという点でPython正規表現でサポートされていますが、正規表現自体でUnicodeエスケープコードを使用することはできません。