あなたはほとんどそれを持っていました。
import re
regex = re.compile(r'(\d+)|([\+-]?\d+)')
s = "1 2 3 4 5 6 +1 +2 +3 -1 -2 -3 +654 -789 321"
for r in regex.findall(s):
if r[0]:
# whole (unsigned)
print 'whole', r[0]
elif r[1]:
# a signed integer
print 'signed', r[1]
結果:
>>>
whole 1
whole 2
whole 3
whole 4
whole 5
whole 6
signed +1
signed +2
signed +3
signed -1
signed -2
signed -3
signed +654
signed -789
whole 321
または、「または」を使用して、「より良い」方法で実際の結果を取得することもできます。
print [r[0] or r[1] for r in regex.findall(s)]
>>>
['1', '2', '3', '4', '5', '6', '+1', '+2', '+3', '-1', '-2', '-3', '+654', '-789', '321']
編集:あなたの質問によると、 「「10」を「+10」として保存することは可能ですか 」:
import re
def _sign(num):
if r[0]:
return '+%s'%r[0]
else:
return r[1]
regex = re.compile(r'(\d+)|([\+-]?\d+)')
s = "1 2 3 4 5 6 +1 +2 +3 -1 -2 -3 +654 -789 321"
print [_sign(r) for r in regex.findall(s)]
>>>
['+1', '+2', '+3', '+4', '+5', '+6', '+1', '+2', '+3', '-1', '-2', '-3', '+654', '-789', '+321']
または1行で:
print ['+%s'%r[0] if r[0] else r[1] for r in regex.findall(s)]
>>>
['+1', '+2', '+3', '+4', '+5', '+6', '+1', '+2', '+3', '-1', '-2', '-3', '+654', '-789', '+321']