Skip to main content
 首页 » 编程设计

python之使用正则表达式分别捕获 "(3 + 44)* 5/7"中的所有运算符、括号和数字

2024年08月22日29sky-heaven

对于输入字符串:st = "(3 + 44)* 5/7"

我希望仅使用正则表达式获得以下结果:["(", "3", "+", "44", ")", "*", "5", "/", "7"]

尝试:

  1. >>> re.findall("[()\d+\-*/].?", st) 
    ['(3', '+ ', '44', ')*', '5 ', '/ ', '7'] 
    

    但我还需要分别捕获 '(3' 和 ')*' 中的括号。

  2. >>> re.findall("[()\d+\-*/]?", st)     
    ['(', '3', '', '+', '', '4', '4', ')', '*', '', '5', '', '/', '', '7', ''] 
    

    这会产生大量空白标记。

请您参考如下方法:

您不能在字符类中使用像 \d+ 这样的多字符结构。

所以你可以像这样通过蛮力做到这一点:

re.findall(r"\(|\)|\d+|-|\*|/", st) 

或者您可以为单字符标记使用字符类,与其他东西交替使用:

re.findall(r"[()\-*/]|\d+", st)