From f2cd1e075f5f0848324434800029581348e275cf Mon Sep 17 00:00:00 2001 From: Sharnabh Banerjee Date: Thu, 5 Oct 2023 20:10:59 +0530 Subject: [PATCH 1/3] Fixes #9726 This algorithm converts camel case to snake case --- strings/camel_case_to_snake_case.py | 42 +++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 strings/camel_case_to_snake_case.py diff --git a/strings/camel_case_to_snake_case.py b/strings/camel_case_to_snake_case.py new file mode 100644 index 000000000000..2e1476c62dd4 --- /dev/null +++ b/strings/camel_case_to_snake_case.py @@ -0,0 +1,42 @@ +def camel_to_snake(camel_str : str) -> str : + import re + + """ + >>> camel_to_snake('someRandomStringWithNumbers123') + 'some_random_string_with_numbers_1_2_3' + >>> camel_to_snake('someRandomString') + 'some_random_string' + >>> camel_to_snake(123) + Traceback (most recent call last): + ... + ValueError: Expected string as input, found + + """ + + + # Raises an error if the input is not a string + if not isinstance(camel_str, str): + msg = f"Expected string as input, found {type(camel_str)}" + raise ValueError(msg) + + """ Use regular expressions to find all occurrences of capital letters + followed by lowercase letters or digits. """ + pattern = re.compile(r'(?<=[a-z0-9])([A-Z0-9])') + + # Replace the capital letter or digit with an underscore and the lowercase version. + snake_str = re.sub(pattern, r'_\1', camel_str) + + # Convert the result to lowercase to get snake_case + snake_str = snake_str.lower() + + # If the string starts with a capital letter, add an underscore at the beginning. + if camel_str[0].isupper(): + snake_str = '_' + snake_str + + return snake_str + + +if __name__ == "__main__" : + import doctest + + doctest.testmod() \ No newline at end of file From dd535933d300f5f5fcf02324262c68ce5bb7566d Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Thu, 5 Oct 2023 14:42:35 +0000 Subject: [PATCH 2/3] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- strings/camel_case_to_snake_case.py | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/strings/camel_case_to_snake_case.py b/strings/camel_case_to_snake_case.py index 2e1476c62dd4..fe9a843e5ce0 100644 --- a/strings/camel_case_to_snake_case.py +++ b/strings/camel_case_to_snake_case.py @@ -1,4 +1,4 @@ -def camel_to_snake(camel_str : str) -> str : +def camel_to_snake(camel_str: str) -> str: import re """ @@ -6,13 +6,12 @@ def camel_to_snake(camel_str : str) -> str : 'some_random_string_with_numbers_1_2_3' >>> camel_to_snake('someRandomString') 'some_random_string' - >>> camel_to_snake(123) + >>> camel_to_snake(123) Traceback (most recent call last): ... ValueError: Expected string as input, found - - """ + """ # Raises an error if the input is not a string if not isinstance(camel_str, str): @@ -21,22 +20,22 @@ def camel_to_snake(camel_str : str) -> str : """ Use regular expressions to find all occurrences of capital letters followed by lowercase letters or digits. """ - pattern = re.compile(r'(?<=[a-z0-9])([A-Z0-9])') + pattern = re.compile(r"(?<=[a-z0-9])([A-Z0-9])") # Replace the capital letter or digit with an underscore and the lowercase version. - snake_str = re.sub(pattern, r'_\1', camel_str) + snake_str = re.sub(pattern, r"_\1", camel_str) # Convert the result to lowercase to get snake_case snake_str = snake_str.lower() # If the string starts with a capital letter, add an underscore at the beginning. if camel_str[0].isupper(): - snake_str = '_' + snake_str + snake_str = "_" + snake_str return snake_str -if __name__ == "__main__" : +if __name__ == "__main__": import doctest - doctest.testmod() \ No newline at end of file + doctest.testmod() From 991ae389866d3aa8568434d8f82a47a955581f17 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Fri, 6 Oct 2023 16:30:42 +0000 Subject: [PATCH 3/3] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- strings/camel_case_to_snake_case.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/strings/camel_case_to_snake_case.py b/strings/camel_case_to_snake_case.py index 46dca6ada763..fe9a843e5ce0 100644 --- a/strings/camel_case_to_snake_case.py +++ b/strings/camel_case_to_snake_case.py @@ -38,4 +38,4 @@ def camel_to_snake(camel_str: str) -> str: if __name__ == "__main__": import doctest - doctest.testmod() \ No newline at end of file + doctest.testmod()