Hi Sia, Find a multi-digit method in this version:
from string import maketrans from itertools import takewhile def is_digit(s): return s.isdigit() class redux: def __init__(self): intab = '+-' outtab = ' ' self.trantab = maketrans(intab, outtab) def reduce_plusminus(self, s): list_form = [r[int(r[0]) + 1:] if r[0].isdigit() else r for r in s.translate(self.trantab).split()] return ''.join(list_form) def reduce_plusminus_multi_digit(self, s): spl = s.translate(self.trantab).split() digits = [list(takewhile(is_digit, r)) for r in spl] numbers = [int(''.join(r)) if r else 0 for r in digits] skips = [len(dig) + num for dig, num in zip(digits, numbers)] return ''.join([s[r:] for r, s in zip(skips, spl)]) if __name__ == "__main__": p = redux() print p.reduce_plusminus(".+3ACG.+5CAACG.+3ACG.+3ACG") print p.reduce_plusminus("tA.-2AG.-2AG,-2ag") print 'multi-digit...' print p.reduce_plusminus_multi_digit(".+3ACG.+5CAACG.+3ACG.+3ACG") print p.reduce_plusminus_multi_digit(".+12ACGACGACGACG.+5CAACG.+3ACG.+3ACG") HTH, Nick On Saturday, 5 January 2013 19:35:26 UTC+11, Sia wrote: > I have strings such as: > > > > tA.-2AG.-2AG,-2ag > > or > > .+3ACG.+5CAACG.+3ACG.+3ACG > > > > The plus and minus signs are always followed by a number (say, i). I want > python to find each single plus or minus, remove the sign, the number after > it and remove i characters after that. So the two strings above become: > > > > tA.., > > and > > ... > > > > How can I do that? > > Thanks. -- http://mail.python.org/mailman/listinfo/python-list