有什么正则表达式可以匹配Python中的整数字面量,支持额外的内容如
我的解决方案是向IPython添加钩子,以自动包装输入中的所有整数字面量与Integer(SymPy的定制整数类)在一起(可通过除法得到Rational)。这将使我能够在
此外,既然每个人都对我尝试过的东西很感兴趣,那么这里还有:在放弃之前没做太多(正则表达式难度太大)。我用
o
和l
,但是不会匹配浮点型或者变量名中带数字的情况。我使用Python的re
库,所以任何被它支持的语法都可以。
编辑:这是我的动机(显然这很重要)。我正在尝试修复http://code.google.com/p/sympy/issues/detail?id=3182。我想要做的是创建一个IPython钩子,将int/int(如1/2
)自动转换为Rational(int,int)
(如Rational(1,2)
)。原因是否则就无法将1/2
注册为一个有理数,因为它是Python类型__div__
Python类型。在SymPy中,这可能会非常麻烦,因为像x **(1/2)
这样的东西会创建x ** 0
(或者与 __future__
分割或Python 3一起使用x ** 0.5
),而你想要的是x ** Rational(1,2)
,一个确切的数量。我的解决方案是向IPython添加钩子,以自动包装输入中的所有整数字面量与Integer(SymPy的定制整数类)在一起(可通过除法得到Rational)。这将使我能够在
isympy
中添加一个选项,让希望使用它的人们更像传统的计算机代数系统。我希望这解释了为什么我需要它来匹配任何和所有字面量内部的Python表达式,这就是为什么它不需要匹配浮点文字和名称中有数字的变量的原因。此外,既然每个人都对我尝试过的东西很感兴趣,那么这里还有:在放弃之前没做太多(正则表达式难度太大)。我用
(?!\.)
来避免捕获浮点型文字的第一部分,但是这似乎行不通(如果有人能告诉我为什么,例如re.sub(r"(\d*(?!\.))", r"S\(\1\)", "12.1")
,我会很好奇)。
编辑2:由于我计划与re.sub
一起使用,因此您可以将整个内容都括在括号中,这样我就可以使用\1
:)