文字列内の有効な Python 整数リテラルに一致する正規表現は何ですか? o
やのようなすべての余分なものをサポートする必要l
がありますが、フロートや数値を含む変数には一致しません。私は Python の を使用してre
いるので、それでサポートされている構文はすべて問題ありません。
編集:これが私の動機です(明らかにそれは非常に重要です)。http://code.google.com/p/sympy/issues/detail?id=3182を修正しようとしています。私がやりたいのは、自動的に int/int ( のような1/2
) をRational(int, int)
, ( のような ) に変換する IPython 用のフックを作成することです。その理由は、 Python 型の Python 型であるため、有理数として登録Rational(1, 2)
することができないためです。 SymPy、これは非常に厄介な場合があります. 1/2
__div__
x**(1/2)
x**0
x**0.5
__future__
x**Rational(1, 2)
私の解決策は、入力内のすべての整数リテラルを自動的に整数 (Rational
除算を行う SymPy のカスタム整数クラス) でラップするフックを IPython に追加することです。isympy
これにより、必要な人のために、この点で SymPy を従来のコンピューター代数システムのように動作させるオプションを追加できます。これが、任意の Python 式内のすべてのリテラルに一致させる必要がある理由を説明してくれることを願っています。これが、名前に数字が含まれる float リテラルや変数に一致させる必要がない理由です。
また、みんなが私が試したことに非常に興味を持っているので、ここで: あきらめる前に (正規表現は難しい)。フロートリテラルの最初の部分をキャッチしないように遊んでい(?!\.)
ましたが、これはうまくいかないようでした(誰かが理由を教えてくれたら興味があります。例は ですre.sub(r"(\d*(?!\.))", r"S\(\1\)", "12.1")
)。
EDIT 2:これを と組み合わせて使用 する予定なので、re.sub
使用できるように、回答の全体を括弧で囲むこともできます\1
:)