Hat jemand eine gute Richtige Fall-Algorithmus
Hat jemand eine Vertrauenswürdige Richtiger groß-und Kleinschreibung oder PCase-Algorithmus (ähnlich einem UCase oder Upper)? Ich bin auf der Suche nach etwas, das nimmt einen Wert wie "GEORGE BURDELL"
oder "george burdell"
und verwandelt es in "George Burdell"
.
Habe ich eine einfache eine, die Griffe, die einfachsten Fälle. Das ideal wäre etwas, das verarbeiten kann, Dinge wie "O'REILLY"
und schalten Sie ihn in "O'Reilly"
, aber ich weiß, dass ist schwieriger.
Ich bin vor allem auf die englische Sprache, wenn das vereinfacht die Dinge.
UPDATE: ich bin mit C# als Sprache, aber ich umwandeln können fast alles (vorausgesetzt, wie Funktionalität vorhanden ist).
Ich bin damit einverstanden, dass die McDonald ' s Szenario ist hart. Ich meinte zu erwähnen, dass zusammen mit meiner O ' Reilly Beispiel, aber nicht in dem original-Beitrag.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es sei denn, ich habe deine Frage missverstanden, ich glaube nicht, dass Sie brauchen, um zu Rollen Sie Ihre eigenen, der TextInfo-Klasse kann es für Sie tun.
Wird wieder "George Burdell. Und Sie können mit Ihrer eigenen Kultur, wenn es gibt einige spezielle Regeln beteiligt.
Update: Michael (in einem Kommentar zu dieser Antwort) darauf hingewiesen, dass dies nicht funktionieren wird, wenn die Eingabe von Großbuchstaben, denn die Methode wird davon ausgegangen, dass es eine Abkürzung. Die naive Abhilfe für dieses ist .ToLower() den text vor dem Absenden zu ToTitleCase.
@Zack: ich werde es als eine separate Antwort.
Hier ist ein Beispiel, basierend auf kronoz post.
return new Regex(@"\b(?!Xi\b)(X|XX|XXX|XL|L|LX|LXX|LXXX|XC|C)?(I|II|III|IV|V|VI|VII|VIII|IX)?\b", RegexOptions.IgnoreCase).Replace(word, match => match.Value.ToUpperInvariant());
-- filtert Auch die gemeinsame chinesischen Namen "Xi".Gibt es auch dieses hübsche Perl-scripts für Titel-Gehäuse-text.
http://daringfireball.net/2008/08/title_case_update
Aber es klingt wie von richtiger groß-und Kleinschreibung du meinst.. für die Namen von Personen nur.
Schrieb ich heute in eine app umzusetzen, die ich arbeite. Ich denke dieser code ist ziemlich selbsterklärend, mit Kommentaren. Es ist nicht 100% genau in allen Fällen, aber es behandelt die meisten Ihrer westlichen Namen einfach.
Beispiele:
mary-jane => Mary-Jane
o'brien => O'Brien
Joël VON WINTEREGG => Joël von Winteregg
jose de la acosta => Jose de la Acosta
Der code ist erweiterbar, Sie können hinzufügen, eine beliebige Zeichenfolge Wert des arrays an der Spitze, um Ihre Bedürfnisse anzupassen. Bitte studieren Sie Sie und fügen Sie spezielle Funktion, die erforderlich sein können.
Habe ich eine schnelle C# - port https://github.com/tamtamchik/namecase, die basiert auf " Lingua::EN::NameCase.
Nutzung
Dies ist meine test-Methode, alles zu gehen scheint OK:
Welche Programmiersprache verwenden Sie? Viele Sprachen erlauben die callback-Funktionen für reguläre Ausdrücke übereinstimmt. Diese können verwendet werden, um propercase das Spiel leicht. Der reguläre Ausdruck, der verwendet werden würde, ist ganz einfach, du musst nur mit allen word-Zeichen, etwa so:
Alternativ können Sie bereits extrahiert das erste Zeichen ein extra-Spiel: die
Jetzt können Sie auf das erste Zeichen und die nachfolgenden Zeichen in das match getrennt. Die callback-Funktion können Sie dann schicken Sie einfach eine Verkettung der trifft. In pseudo-Python (ich weiß wirklich nicht, Python):
Übrigens, dies würde auch den Fall behandeln, der "O ' Reilly", weil "O" und "Reilly" würde abgestimmt werden getrennt und beide propercased. Es gibt aber auch andere spezielle Fälle, die nicht behandelt werden, sowie durch den Algorithmus, z.B. "McDonald ' s" oder im Allgemeinen alle apostrophed Wort. Der Algorithmus würde die Produktion von "Mcdonald ' S" für die letztere. Eine Besondere Behandlung für den Apostroph umgesetzt werden könnte, aber das würde einen Eingriff mit dem ersten Fall. Suche nach einem thereotical perfekte Lösung, ist nicht möglich. In der Praxis könnte es helfen, unter Berücksichtigung der Länge der Teil nach dem Hochkomma.
Hier ist eine vielleicht naive C# - Implementierung:-
einen einfachen Weg zur Kapitalisierung der ersten Buchstaben von jedem Wort (getrennt durch Leerzeichen)
in Bezug auf den Fang der "O ' REILLY" Beispiel Sie gab
die Aufteilung der string an den Leerzeichen und 'nicht funktionieren würde, wie es wäre, profitieren alle Buchstaben, die erschienen, nachdem ein apostraphe d.h. die s in Fred' s
also ich würde wahrscheinlich versuchen, so etwas wie
Diese fangen sollte O 'Reilly, O Clock, O' Donnell usw. hoffe es hilft
Bitte Hinweis: dieser code ist ungetestet.
Kronoz, danke. Ich fand in Ihrer Funktion, die Zeile:
muss sagen
so "información" nicht geändert "InforMacIón"
besten,
Enrique
Ich dieses als das textchanged-event-handler des text-Boxen. Support-Eintrag "McDonald"
Viele gute Antworten hier. Mine ist ziemlich einfach und berücksichtigt nur die Namen, die wir haben in unserer Organisation. Sie können ihn erweitern wie Sie wollen. Dies ist keine perfekte Lösung und wird sich ändern, vancouver VanCouver, die falsch ist. So optimieren können, wenn Sie es verwenden.
Hier war meine Lösung in C#. Dieses codiert den Namen in das Programm, aber mit ein wenig Arbeit, die Sie halten konnte eine text-Datei außerhalb des Programms und Lesen Sie den Namen Ausnahmen (z.B. Van, Mc, Mac) und eine Schleife.
Ich weiß, dieser thread ist offen für eine Weile, aber als ich recherchierte für dieses problem stieß ich auf diese nette Website, die ermöglicht Ihnen das einfügen in den Namen werden großgeschrieben, ganz schnell: https://dialect.ca/code/name-case/. Ich wollte es hier zur Referenz für andere, die ähnliche Forschung/Projekte.
Entbinden Sie den Algorithmus haben Sie geschrieben in php unter diesem link: https://dialect.ca/code/name-case/name_case.phps
Einer Vorprüfung und Lesen von deren code vorschlägt, Sie wurden sehr gründlich.
Sie nicht zu erwähnen, in welcher Sprache Sie möchte die Lösung hier ist also etwas pseudo-code.