我试图构建一个正则表达式来捕获任何数字(整数,浮点数,带科学计数法或不带)。 我使用组来使得如果需要更新某些内容,只需更新一行即可。这是我正在做的:
intNumber = r"(?P<Integer>-?(0|[1-9]+[0-9]*))" # Integer
floatNumber = r"(?P<Float>"+intNumber+r"\.[0-9]+)" # Float
sciNumber = r"(?P<Scientific>"+floatNumber+r"(e|E)(-|\+)?[0-9]+)" # Scientific
anyNumber = r"(?P<AnyNumber>"+sciNumber+"|(?P=Integer)|(?P=Float))" # Any number
问题在于,尽管每个正则表达式单独使用时都能正常工作,但当我将它们全部组合在
anyNumber
中并使用 or (|
) 时,它仅捕获科学计数法数字,而不是其他数字。我做错了什么?
编辑:为了改进我的问题,是否有可能生成动态的正则表达式(考虑到简单维护),同时又足够灵活,使我能够单独使用其组件,避免出现重新定义组和方便地对组进行命名等问题?我知道我可能要求过多了。