Im Rahmen der universellen Umwandlung von Zeichenketten in snake_case ist dieser Ansatz mit regulären Ausdrücken wahrscheinlich die beste Option:
import re
def to_snake_case(s: str) -> str:
s = re.sub('(.)([A-Z][a-z]+)', r'\1_\2', s)
return re.sub('([a-z0-9])([A-Z])', r'\1_\2', s).replace('-', '_').lower()🧐 Wie funktioniert das?
1️⃣
re.sub('(.)([A-Z][a-z]+)', r'\1_\2', s) ersetzt jeden Großbuchstaben, der einem Kleinbuchstaben vorausgeht, durch denselben Buchstaben, jedoch mit einem Unterstrich davor.2️⃣
re.sub('([a-z0-9])([A-Z])', r'\1_\2', s) ersetzt jeden Großbuchstaben, der einem Kleinbuchstaben oder einer Ziffer vorausgeht, durch denselben Buchstaben, jedoch mit einem Unterstrich davor.3️⃣ Dann wird alles in Kleinbuchstaben umgewandelt und der Bindestrich durch einen Unterstrich ersetzt.
Aber lassen Sie uns über den Tellerrand der Algorithmusaufgabe hinausblicken und sehen, wie man ein solches Problem in der Praxis löst. Wenn in Ihrem Projekt Pydantic verwendet wird, ist das alles längst geschrieben, an Millionen von Codezeilen getestet und liegt direkt in der Box:
from pydantic import BaseModel, ConfigDict
from pydantic.alias_generators import to_camel, to_snake
class FrontendData(BaseModel):
model_config = ConfigDict(
alias_generator=to_camel, # Erwartet automatisch camelCase als Eingabe
populate_by_name=True
)
python_talk: str # Im Code arbeiten wir mit orthodoxem snake_caseUnter der Haube stecken ausgefeilte Algorithmen, die Randfälle, nicht standardmäßige Trennzeichen und die kranken Fantasien der Entwickler angrenzender Systeme berücksichtigen.
Und wenn Pydantic nicht im Projekt ist, gibt es Mikrobibliotheken wie inflection, die dasselbe tun:
import inflection
inflection.underscore("CamelCaseAnd-kebab-case")
# -> 'camel_case_and_kebab_case'
inflection.camelize("python_talk", uppercase_first_letter=False)
# -> 'pythonTalk'Es ist nützlich, Algorithmen mit regulären Ausdrücken zu kennen, um den Algorithmus-Interview zu bestehen und zu verstehen, wie Zeichenketten geparst werden. Aber die Werkzeuge zu kennen ist notwendig, um keine selbstgebauten Fahrräder in die Produktion zu schleppen, die unweigerlich beim ersten krummen Payload kaputtgehen.
#AlgorithmusInterview
Kommentare
0Noch keine Kommentare.
Melde dich an, um mitzudiskutieren.