我正在寻找一种方法来扩展由斜杠分隔的数字。除了斜线,括号可以用在一些(或所有)数字周围来表示一个“组”,它可以重复(直接在括号后面的次数)或反向重复(后面跟着's'作为在第二组示例中显示)。一些例子是:
1 -> ['1'] -> No slashes, no parentheses
1/2/3/4 -> ['1', '2', '3', '4'] -> basic example with slashes
1/(2)4/3 -> ['1', '2', '2', '2', '2', '3'] -> 2 gets repeated 4 times
1/(2/3)2/4 -> ['1', '2', '3', '2', '3', '4'] -> 2/3 is repeated 2 times
(1/2/3)2 -> ['1', '2', '3', '1', '2', '3'] -> Entire sequence is repeated twice
(1/2/3)s -> ['1', '2', '3', '3', '2', '1'] -> Entire sequence is repeated in reverse
1/(2/3)s/4 -> ['1', '2', '3', '3', '2', '4'] -> 2/3 is repeated in reverse
在最一般的情况下,甚至可能有嵌套的括号,我知道这通常会使正则表达式的使用变得不可能。在我需要处理的当前数据集中,没有这样的嵌套集,但我可以看到它在未来的潜在用途。例如:
1/(2/(3)2/4)s/5 -> 1/(2/3/3/4)s/5
-> 1/2/3/3/4/4/3/3/2/5
-> ['1', '2', '3', '3', '4', '4', '3', '3', '2', '5']
我当然知道正则表达式不能完成所有这些(尤其是重复/反转括号集)。但是,如果我能得到一个正则表达式,它至少将括号中的字符串与括号中的字符串分开,那么我可能可以很容易地制作一些循环来处理其余部分。所以,我正在寻找的正则表达式会做这样的事情:
1 -> ['1']
1/2/3/4 -> ['1', '2', '3', '4']
1/(2)4/3 -> ['1', '(2)4', '3']
1/(2/3)2/4 -> ['1', '(2/3)2', '4']
1/(2/(3)2/4)s/5 -> ['1', '(2/(3)/2/4)s', '5']
然后我可以循环这个结果并继续扩展任何括号,直到我只有数字。
编辑
我在原始帖子中并不完全清楚。在我试图使示例尽可能简单的过程中,我可能过度简化了它们。这需要适用于 >= 10 的数字以及负数。
例如:
1/(15/-23)s/4 -> ['1', '(15/-23)s', '4']
-> ['1', '15', '-23', '-23', '15', '4']