2016-06-27 19 views
-3

Ich habe eine Menge von Sätzen alle mit einem Namen beginnend, wieEntfernen Sie das gesamte Kapital Wort vom Anfang des Satzes

Humpty Dumpty fiel.
Mini Miny Moe ging nach Meadville, Mississippi.
Kleines Ferkel ist ein Anstrich.

Wie kann ich den Namen leicht aus den Sätzen herausziehen?

Die Regex /([A-Z])\w+/g wird mir alle Wörter mit einem Großbuchstaben geben, aber ich will keinen Treffer auf Meadville und Mississippi.

So für die gegebenen Beispiele möchte ich die folgende Ausgabe wollen:

"Humpty Dumpty", " fell down." 
"Mini Miny Moe", " went to Meadville, Mississippi." 
"Little Piglet", " is a squealer." 

ich den Namen als eine Zeichenfolge und den Rest als eine andere Zeichenfolge benötigen. Wenn es sich um ein Array aus zwei Strings oder ein Objekt mit zwei Eigenschaften handelt - das ist mir egal, solange ich sie getrennt habe.

Vorschläge?

+1

welche Ausgabe Sie exportieren? –

+3

Was ist, wenn die Linie mit "Mississippi" beginnt ...? –

+1

@ThomasAyoub Ich denke, er meint nur, er will nicht die kapitalisierten Wörter, die später im Satz kommen. –

Antwort

4

Dies sollte es tun

/^([A-Z][a-z]*)+/ 

wird es passen:

Humpty Dumpty fell down. --> Humpty Dumpty 
Mini Miny Moe went to Meadville, Mississippi. --> Mini Miny Moe 
Little Piglet is a squealer. --> Little Piglet 

EDIT

So zu erfassen wie das Beispiel Sie setzen:

/^((?:[A-Z][a-z]*)+)(.*)/ 

es wird Ihnen fast, was Sie wollen, sollten Räume nicht schwer entfernen Raum Hinter oder fügen Sie, wo Sie sie brauchen:

Humpty Dumpty fell down. --> "Humpty Dumpty ", "fell down." 
Mini Miny Moe went to Meadville, Mississippi. --> "Mini Miny Moe ", "went to Meadville, Mississippi." 
Little Piglet is a squealer. --> "Little Piglet ", "is a squealer." 

EDIT 2:

Nach Beratung in Kommentar, so Sie müssen nicht mit dem Hinzufügen/Entfernen von Leerzeichen nach den Gruppen geting beschäftigen:

/^([A-Z][a-z]*(?:\s+[A-Z][a-z]*)*)(.*)/ 

Und wenn Sie René Descartes oder Shane Baker-Oropeza als Namen:

/^([A-ZÁÉÍÓÚ][a-záéíóú]*(?:(?:\s|-)+[A-ZÁÉÍÓÚ][a-záéíóú]*)*)(.*)/ 
+0

Netter Fang, sei dir nur bewusst, dass 'Jean-Paul' oder' René' deine Regex kreuzen kann ... Du hast sowieso meine Erwähnung –

+1

Ich wollte gerade einen Kommentar zum fehlplatzierten Space abgeben. :-) – Vegar

+1

Ich würde ['^ [A-Z] [a-z] * (?: \ S + [A-Z] [a-z] *) *'] (https://regex101.com/r/uF6gH6/1) verwenden. –

0

Sie müssen Ihre Geschäftsregel erweitern. Nur nach einem Leerzeichen zwischen Wörtern zu suchen, die mit einem Großbuchstaben beginnen, wird Städte wie Silver Spring, MD durchschlüpfen. Jede Stadt, die mit "Neu" beginnt, wird auch durchkommen.

Ich bin mir nicht sicher, wie Sie das tun werden.

Wenn Sie mit einer Stadtdatentabelle vergleichen, werden Sie auch Namen von Personen löschen, die mit Städtenamen übereinstimmen. Zum Beispiel haben Sie einen amerikanischen Arzt namens Silver Spring. Wenn er seinen Titel ", MD" beifügt, stimmt es genau überein.

+0

Ich brauche meine Geschäftsregel nicht zu erweitern, da die Geschäftsregel bereits gut definiert ist. Es wird am Anfang Namen geben und sonst nichts. Wenn es gültige Sätze gibt, in denen die ersten beiden "Begriffe" zuerst ein Name und dann eine Stadt sind, wie "Humpty Dumpty London ...", ist es einfach nicht Teil dieser Problemdomäne. – Vegar

Verwandte Themen