使用正则表达式或循环在 Python 中进行条件字符串拆分

Conditional string splitting in Python using regex or loops

我有一个字符串 c,它具有相应的重复模式:

例如,c 可能看起来像 1D2S#10S,或 1D#2S*3S,等等。

我要用 c 进行进一步的计算,但为了做到这一点,我认为将 c 拆分为包含整数、字符和可能的特殊字符的子字符串会有所帮助。因此,例如,1D2S#10S 将拆分为 1D2S#10S1D#2S*3S 将拆分为 1D#2S*3S

我知道这样的字符串拆分可以用 re.split() 简洁地完成,但由于这是有条件的,我无法找到拆分它的最佳方法。相反,我尝试使用 for 循环:

clist = []
n = 0
for i in range(len(c)):
  if type(c[i]) != 'int':
    if type(c[i+1]) == 'int':
      clist.append(c[n:i+1])
      n = i
    else:
      clist.append(c[n:i+2])
      n = i

这引发了一个索引问题,但尽管如此我可以说它不是最佳的。有没有办法使用 re 相应地拆分它?

使用re.findall():

>>> re.findall(r'\d*[SDT][\*#]?', '1D2S#10S')
['1D', '2S#', '10S']
>>> re.findall(r'\d*[SDT][\*#]?', '1D#2S*3S')
['1D#', '2S*', '3S']