对于输入字符串:st = "(3 + 44)* 5/7"
我希望仅使用正则表达式获得以下结果:["(", "3", "+", "44", ")", "*", "5", "/", "7"]
尝试:
-
>>> re.findall("[()\d+\-*/].?", st) ['(3', '+ ', '44', ')*', '5 ', '/ ', '7']但我还需要分别捕获
'(3'和')*'中的括号。 -
>>> re.findall("[()\d+\-*/]?", st) ['(', '3', '', '+', '', '4', '4', ')', '*', '', '5', '', '/', '', '7', '']这会产生大量空白标记。
请您参考如下方法:
您不能在字符类中使用像 \d+ 这样的多字符结构。
所以你可以像这样通过蛮力做到这一点:
re.findall(r"\(|\)|\d+|-|\*|/", st)
或者您可以为单字符标记使用字符类,与其他东西交替使用:
re.findall(r"[()\-*/]|\d+", st)
