Skip to content

Instantly share code, notes, and snippets.

@al1p-R
Last active April 16, 2023 08:36
Show Gist options
  • Save al1p-R/a3d205aeab52c4a885eb918c2ceba4e0 to your computer and use it in GitHub Desktop.
Save al1p-R/a3d205aeab52c4a885eb918c2ceba4e0 to your computer and use it in GitHub Desktop.
Benchmarking different string replace methods - example from @MarcinJuraszek ported to Python by ChatGPT - https://gist.github.com/MarcinJuraszek/c1437d925548561ba210a1c6ed144452
# Based on https://gist.github.com/MarcinJuraszek/c1437d925548561ba210a1c6ed144452 from @MarcinJuraszek
# Ported to python by ChatGPT 4
'''
RESULTS
Replace using regex:
0.02475070800028334
Replace using multiple replace calls:
0.0008895419996406417
Replace using split and join:
0.014065958999708528
'''
import re
import timeit
input_text = """Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec nec eros magna. Sed eros tortor, aliquam ac ultrices vel, fringilla sit amet nisl. Maecenas ultricies, enim luctus convallis euismod, tortor massa porttitor eros, eget iaculis enim nisl non dui. Maecenas aliquet magna et fau;cibus elementum. Cras vehicula, lorem ac auctor lobortis, arcu enim euismod dolor, ut commodo turpis lacus nec nisi. Etiam volutpat et lorem nec mattis. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Interdum et malesuada fames ac ante ipsum primis in faucibus. Nulla eget semper nisl. Nullam tristique placerat neque eu congue. Sed fringilla leo vel nulla rhoncus sollicitudin. Aliquam erat volutpat. Fusce posuere enim eu metus efficitur, feugiat lobortis orci volutpat. Duis tempor felis non leo venenatis, nec venenatis sapien pulvinar.
...
"""
separators = [' ', ';', ',', '\r', '\t', '\n']
new_val = '\n'
pattern = re.compile(r"[;,\t\r ]|[\n]{2}")
def replace_using_regex():
return pattern.sub(new_val, input_text)
def replace_using_multiple_replace_calls():
result = input_text
for separator in separators:
result = result.replace(separator, new_val)
return result
def replace_using_split_and_join():
temp = re.split('|'.join(map(re.escape, separators)), input_text)
return new_val.join(temp)
if __name__ == '__main__':
print('Replace using regex:')
print(timeit.timeit('replace_using_regex()', globals=globals(), number=1000))
print('Replace using multiple replace calls:')
print(timeit.timeit('replace_using_multiple_replace_calls()', globals=globals(), number=1000))
print('Replace using split and join:')
print(timeit.timeit('replace_using_split_and_join()', globals=globals(), number=1000))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment