正则表达式解析间隔

时间:2013-10-31 20:17:37

标签: python regex

我有一个用于解析间隔的正则表达式,如[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

1 个答案:

答案 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))