Python Forum
Regex: Remove all match plus one char before all
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Regex: Remove all match plus one char before all
#17
I don't know how you time it but here is what I get:

import re
import timeit

def alfalfa(input_str=None, n=1000):
   if not input_str:
       string = 'it |BS||BS||BS|this is one|BS||BS||BS|an example'*n
   else:
       string = input_str
   while re.search("\|BS\|", string):
       array = list(string)
       for m in re.finditer("\|BS\|", string):
           del array[m.start():m.end()]
           if m.start()-1 >= 0:
               del array[m.start()-1]
           string = ''.join(array)
           break
   return string

def buran1(input_str = None, n=1000):
   ptrn = re.compile(r'[\w ]?\|BS\|')
   if not input_str:
       string = 'it |BS||BS||BS|this is one|BS||BS||BS|an example'*n
   else:
       string = input_str
   while True:
       after_sub = ptrn.sub('', string, count=1)
       if string == after_sub:
           break
       else:
           string = after_sub
   return string
   
def buran2(input_str=None, n=1000):
   ptrn = re.compile(r'(\|BS\|)+')
   if not input_str:
       string = 'it |BS||BS||BS|this is one|BS||BS||BS|an example'*n
   else:
       string = input_str
   while True:
       match = re.search(ptrn, string)
       if match:
           num_chars = min(match.start(), int(len(match.group())/4))
           sub_pattern = re.compile(r'[\w ]{{{}}}(\|BS\|)+'.format(num_chars))
           string = sub_pattern.sub('', string, count=1)
       else:
           break
   return string
   
def noBS(s=None, n=1000):
   if not s:
       s = 'it |BS||BS||BS|this is one|BS||BS||BS|an example'*n
   else:
       s = s*n
   pattern=re.compile(r'.\|BS\|((\|BS\|)*)')
   previous=''
   while s!=previous:
       previous=s
       s=re.sub(pattern,r'\1',s) 
   return s

if __name__ == '__main__':
   print 'repeat 1000, short string:\n'
   print 'alfalfa --> {}'.format(timeit.timeit("alfalfa(n=1)", number=1000, setup="from __main__ import alfalfa"))
   print 'buran1 --> {}'.format(timeit.timeit("buran1(n=1)", number=1000, setup="from __main__ import buran1"))
   print 'buran2 --> {}'.format(timeit.timeit("buran2(n=1)", number=1000, setup="from __main__ import buran2"))
   print 'ofnut --> {}'.format(timeit.timeit("noBS(n=1)", number=1000, setup="from __main__ import noBS"))
   print '\nrepeat 1, long string\n'
   print 'alfalfa --> {}'.format(timeit.timeit("alfalfa()", number=1, setup="from __main__ import alfalfa"))
   print 'buran1 --> {}'.format(timeit.timeit("buran1()", number=1, setup="from __main__ import buran1"))
   print 'buran2 --> {}'.format(timeit.timeit("buran2()", number=1, setup="from __main__ import buran2"))
   print 'ofnut --> {}'.format(timeit.timeit("noBS()", number=1, setup="from __main__ import noBS"))
and the result of two consecutive runs:

Output:
repeat 1000, short string: alfalfa --> 0.0432239843385 buran1 --> 0.0112259009714 buran2 --> 0.0158689890339 ofnut --> 0.0273017555023 repeat 1, long string alfalfa --> 3.50733362241 buran1 --> 1.34837528801 buran2 --> 1.86298544437 ofnut --> 0.0084199068111 repeat 1000, short string: alfalfa --> 0.0284217156815 buran1 --> 0.00996738901746 buran2 --> 0.0157894500521 ofnut --> 0.0273982927342 repeat 1, long string alfalfa --> 3.52313333556 buran1 --> 1.35965603239 buran2 --> 1.82195551718 ofnut --> 0.00834742370672
Reply


Messages In This Thread
RE: Regex: Remove all match plus one char before all - by buran - Feb-22-2017, 08:01 AM

Possibly Related Threads…
Thread Author Replies Views Last Post
  Facing issue in python regex newline match Shr 6 1,596 Oct-25-2023, 09:42 AM
Last Post: Shr
Sad How to split a String from Text Input into 40 char chunks? lastyle 7 1,334 Aug-01-2023, 09:36 AM
Last Post: Pedroski55
  Failing regex, space before and after the "match" tester_V 6 1,345 Mar-06-2023, 03:03 PM
Last Post: deanhystad
  Regex pattern match WJSwan 2 1,409 Feb-07-2023, 04:52 AM
Last Post: WJSwan
  Match substring using regex Pavel_47 6 1,572 Jul-18-2022, 07:46 AM
Last Post: Pavel_47
  Match key-value json,Regex saam 5 5,589 Dec-07-2021, 03:06 PM
Last Post: saam
  How to replace on char with another in a string? korenron 3 2,455 Dec-03-2020, 07:37 AM
Last Post: korenron
  How to remove char from string?? ridgerunnersjw 2 2,643 Sep-30-2020, 03:49 PM
Last Post: ridgerunnersjw
  regex.findall that won't match anything xiaobai97 1 2,121 Sep-24-2020, 02:02 PM
Last Post: DeaD_EyE
  Creating new list based on exact regex match in original list interjectdirector 1 2,392 Mar-08-2020, 09:30 PM
Last Post: deanhystad

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020