我有一个用于解析间隔的正则表达式,如[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
?
答案 0 :(得分: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))