我正在使用 re.split() 并尝试加入元素,但它不起作用。为什么?

I'm using re.split() and trying to join the elements but it doesn't work. Why is it?

我有一个问题,我找不到原因。 我想把字符串分成3部分,条件是“整数+字母+*(可选)” 一位数时有效,两位数时无效

这是我的代码:

import re
dartResult = '10S*3T2D*'
dartresult = re.split('(\d)',dartResult)   
dartresult=[i for i in dartresult if i != ""]
score = []
for i in range(len(dartresult)):
    try:
        if int(dartresult[i]):
            score.append(["".join(dartresult[i:i+2])])
        elif int(dartresult[i]) and int(dartresult[i+1]):   #in case the number is two digits
            score.append(["".join(dartresult[i:i+3])])    
    except:
        pass
print(dartresult)
print(score)

这就是结果。

['1', '0', 'S*', '3', 'T', '2', 'D*']
[['10'], ['3T'], ['2D*']]

如果有更好的方法根据上述条件划分字符串,请告诉我。

在 \d 后紧跟一个 + 以捕获任何连续的数字字符。

为什么不简单地定义正则表达式中的所有元素?

import re
dartResult = '10S*3T2D*'
out = re.findall(r'\d+\w\*?', dartResult)

输出:

>>> out
['10S*', '3T', '2D*']

正则表达式:

\d+     # one or more digits
\w      # one character (letters/digit/underscore), to restrict to letters use [a-zA-Z]
\*?     # optionally, one "*" character