def all_letters(value): """ :type value: str :rtype: bool """ for v in value.lower(): if v not in "abcdefghijklmnopqrstuvwxyz": return False return True def all_numbers(value): """ :type value: str :rtype: bool """ for v in value.lower(): if v not in "1234567890": return False return True def has_mixed_case(value): """ :type value: str :rtype: bool """ has_upper = False has_lower = False for v in value.lower(): if v in "abcdefghijklmnopqrstuvwxyz": has_lower = True break if not has_lower: return False for v in value.upper(): if v in "abcdefghijklmnopqrstuvwxyz": has_upper = True break return has_upper and has_lower def split_on_case_two(value): value_with_commas = "" for index, char in enumerate(value): try: upper = char.upper() next_upper = value[index + 1].upper() if char == upper and value[index + 1] != next_upper: value_with_commas += "," + char continue if char == char.lower() and value[index + 1] != value[index + 1].lower(): value_with_commas += char + "," continue except IndexError: pass value_with_commas += char return value_with_commas.replace(",,", ",").strip(",").split(",") def likely_structure(value): """ :type value:str :rtype:str """ # parts are : word, letter, number parts = [] if "_" in value: splits = value.split("_") else: splits = split_on_case_two(value) # split on dictionary word? split on common names? for part in splits: # check if name, if english word if all_letters(part) and part != part.upper(): parts.append("WORD") elif len(part) > 1 and all_letters(part) and part == part.upper(): # Not really, but hey. parts.append("ACRONYM") elif len(part) == 1 and all_letters(part) and part == part.upper(): parts.append("INITIAL") elif all_letters(part): parts.append("NUMBER" + str(len(part))) elif len(part) > 1 and part[0].isalpha() and part[-1].isnumeric(): parts.append("STRNUMBER") elif part.isnumeric(): parts.append("NUMBER") else: parts.append("STRING") return parts for value in ["MisterSql", "MisterSQL", "MisterSQLMan", "MisterEsQueEll", "mistersql", "MRSQL", "M1R2S3Q4L", "12341234", "Mister_SQL", "MISTER_S_Q_L", "Mister_SQL_Man", "Mister_Es_Que_El"]: print(value + " " + str(likely_structure(value)))
Run
Reset
Share
Import
Link
Embed
Language▼
English
中文
Python Fiddle
Python Cloud IDE
Follow @python_fiddle
Browser Version Not Supported
Due to Python Fiddle's reliance on advanced JavaScript techniques, older browsers might have problems running it correctly. Please download the latest version of your favourite browser.
Chrome 10+
Firefox 4+
Safari 5+
IE 10+
Let me try anyway!
url:
Go
Python Snippet
Stackoverflow Question