On 4 Nov 2005 22:49:03 -0800, [EMAIL PROTECTED] wrote: >hi > >i have a string : >a = >"this\nis\na\nsentence[startdelim]this\nis\nanother[enddelim]this\nis\n" > >inside the string, there are "\n". I don't want to substitute the '\n' >in between >the [startdelim] and [enddelim] to ''. I only want to get rid of the >'\n' everywhere else. > >i have read the tutorial and came across negative/positive lookahead >and i think it can solve the problem.but am confused on how to use it. >anyone can give me some advice? or is there better way other than >lookaheads ...thanks.. >
Sometimes splitting and processing the pieces selectively can be a solution, e.g., if delimiters are properly paired, splitting (with parens to keep matches) should give you a repeating pattern modulo 4 of <"everywhere else" as you said><first delim><between><second delim> ... >>> a = >>> "this\nis\na\nsentence[startdelim]this\nis\nanother[enddelim]this\nis\n" >>> import re >>> splitter = re.compile(r'(?s)(\[startdelim\]|\[enddelim\])') >>> sp = splitter.split(a) >>> sp ['this\nis\na\nsentence', '[startdelim]', 'this\nis\nanother', '[enddelim]', 'this\nis\n'] >>> ''.join([(lambda s:s, lambda s:s.replace('\n',''))[not i%4](s) for i,s in >>> enumerate(sp)]) 'thisisasentence[startdelim]this\nis\nanother[enddelim]thisis' >>> print ''.join([(lambda s:s, lambda s:s.replace('\n',''))[not i%4](s) for >>> i,s in enumerate(sp)]) thisisasentence[startdelim]this is another[enddelim]thisis I haven't checked for corner cases, but HTH Maybe I'll try two pairs of delimiters: >>> a += >>> "2222\n33\n4\n55555555[startdelim]6666\n77\n8888888[enddelim]9999\n00\n" >>> sp = splitter.split(a) >>> print ''.join([(lambda s:s, lambda s:s.replace('\n',''))[not i%4](s) for >>> i,s in enumerate(sp)]) thisisasentence[startdelim]this is another[enddelim]thisis222233455555555[startdelim]6666 77 8888888[enddelim]999900 which came from >>> sp ['this\nis\na\nsentence', '[startdelim]', 'this\nis\nanother', '[enddelim]', 'this\nis\n2222\n33 \n4\n55555555', '[startdelim]', '6666\n77\n8888888', '[enddelim]', '9999\n00\n'] Which had the replacing when not i%4 was true >>> for i,s in enumerate(sp): print '%6s: %r'%(not i%4,s) ... True: 'this\nis\na\nsentence' False: '[startdelim]' False: 'this\nis\nanother' False: '[enddelim]' True: 'this\nis\n2222\n33\n4\n55555555' False: '[startdelim]' False: '6666\n77\n8888888' False: '[enddelim]' True: '9999\n00\n' Regards, Bengt Richter -- http://mail.python.org/mailman/listinfo/python-list