fork download
  1. # BENCHMARK - Python convertir un string en CamelCase a separados por guiones
  2. # http://es.stackoverflow.com/a/61561/127
  3.  
  4. import cProfile, pstats, io, string
  5. import re
  6.  
  7.  
  8. patron = r"[A-Z]\d*(?:[A-Z\d]*(?=[A-Z]|$)|[a-z])"
  9. pascal = re.compile(patron)
  10. def pascal_kebab(cadena):
  11. return pascal.sub(lambda m: ("-" if m.start() else "") + m.group().lower(), cadena)
  12.  
  13.  
  14. pattP = re.compile(r'(.)([A-Z][a-z]+)')
  15. pattF = re.compile('([a-z0-9])([A-Z])')
  16. def camel_a_guiones(cadena):
  17. return pattF.sub(r'\1-\2', pattP.sub(r'\1-\2', cadena)).lower()
  18.  
  19. patt = re.compile(r'.+?(?:(?<=[a-z0-9])(?=[A-Z])|(?<=[A-Z])(?=[A-Z][a-z])|$)')
  20. def camel_a_guiones_iter(cadena):
  21. return '-'.join(m.group(0) for m in re.finditer(patt, cadena)).lower()
  22.  
  23.  
  24. pruebas = ['VerHTMLDePag', 'Ver2HTMLDePag', 'Ver2HTMLPag2Info', 'HTMLFomatoPag', 'HTMLConXML',
  25. 'HTML5FomatoPag', 'HTML5ConXML', 'HTML5ConCSS3', 'HTML', 'VerQ', 'A2BFormato',
  26. 'Formato', 'SFormato' ]
  27.  
  28.  
  29.  
  30. pr = cProfile.Profile()
  31. pr.enable()
  32. for i in range(36000):
  33. for prueba in pruebas:
  34. pascal_kebab(prueba)
  35. camel_a_guiones(prueba)
  36. camel_a_guiones_iter(prueba)
  37. pr.disable()
  38. s = io.StringIO()
  39. sortby = 'cumulative'
  40. ps = pstats.Stats(pr, stream=s).strip_dirs().sort_stats(sortby).reverse_order()
  41. ps.print_stats('pascal_kebab|camel_a_guiones')
  42. print(s.getvalue())
Success #stdin #stdout 9.13s 30968KB
stdin
Standard input is empty
stdout
         20196051 function calls in 8.842 seconds

   Ordered by: cumulative time
   List reduced from 26 to 3 due to restriction <'pascal_kebab|camel_a_guiones'>

   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
   468000    0.200    0.000    2.019    0.000 prog.py:10(pascal_kebab)
   468000    0.381    0.000    2.754    0.000 prog.py:20(camel_a_guiones_iter)
   468000    0.314    0.000    4.068    0.000 prog.py:16(camel_a_guiones)