0

我有一个用于解析间隔的正则表达式,比如[22.3, sqrt(31))

([\[\(])([-+]?[0-9]*\.?[0-9]*|(\w*\([-+]?[0-9]*\.?[0-9]*\))|[+-]?oo)\W*?([-+]?[0-9]*\.?[0-9]*|(\w*\([-+]?[0-9]*\.?[0-9]*\))|[+-]?oo)(\]\))

我正在查看该计划并感到困惑:到底出了什么问题?
我也想知道:我可以将正则表达式拆分为字符串,例如
regexfloat = '..'
然后以某种方式将它们组合成re.compile?

4

1 回答 1

1

结尾(\]\))匹配]),但不只是其中一个字符。你忘了把它们包起来[ ]

([[(])([-+]?[0-9]*\.?[0-9]*|(\w*\([-+]?[0-9]*\.?[0-9]*\))|[+-]?oo)\W*?([-+]?[0-9]*\.?[0-9]*|(\w*\([-+]?[0-9]*\.?[0-9]*\))|[+-]?oo)([])])

将模式分成几个字符串:

p_float = r'[-+]?[0-9]*\.?[0-9]*'  # a number
p_func = r'\w*\(%s\)' % p_float    # function + number
p_inf = r'[+-]?oo'                 # infinity
p_value = r'%s|%s|%s' % (p_float, p_func, p_inf)
pattern = re.compile(r'([[(])(%s)\W*?(%s)([])])' % (p_value, p_value))
于 2013-10-31T21:58:25.683 回答