Beginnen Sie mit dem Vergleich am Ende einer Zeichenfolge

9

Von diese Frage , die geschlossen wurde, fragte die OP, wie man Rang, zuerst, Mitte und zuletzt aus den Strings extrahiert

%Vor%

Ich habe mir das ausgedacht, was nur funktioniert, wenn der zweite Name eine Periode enthält; Andernfalls erfasst das Muster für den Rang so viel wie möglich vom Anfang der Zeile.

%Vor%

Das würde also funktionieren, wenn der zweite Name nicht angegeben wäre oder einen Punkt enthält

%Vor%

Also meine Frage ist, gibt es eine Möglichkeit, die Übereinstimmung vom Ende der Zeichenfolge zu priorisieren, so dass dieses Muster mit last, middle, first übereinstimmt und dann alles andere nach Rang zurücklässt.

Kann ich das tun, ohne die Saite umzukehren oder so einen Hacky? Vielleicht gibt es auch ein besseres Muster, da ich mit Regex nicht gut bin.

Verwandte - [1] [2] - Ich denke nicht, dass das funktionieren wird weil ein anderes Muster vorgeschlagen wurde, anstatt die Frage zu beantworten. Auch in diesem Beispiel ist die Anzahl der Wörter im Rang beliebig, und das Muster, das dem Rang entspricht, würde auch für den Vornamen funktionieren.

    
rawr 13.11.2016, 15:30
quelle

2 Antworten

2

Wir können den Matching vom Ende nicht starten, es gibt keine Modifikatoren dafür in irgendeinem Regex-System, das ich kenne. Aber wir können überprüfen, wie viele Wörter wir bis zum Ende haben und unsere Gier zurückhalten :). Der folgende Regex macht das.

Dieser wird tun, was Sie wollen:

%Vor%

Live-Vorschau in regex101.com

Es gibt auch eine Ausnahme:

Wenn Sie First, Last und mehr als 1 Wort für den Rang haben, wird der Teil des Rangs zu einem Vornamen.

Um das zu lösen, müssen Sie eine Liste von Rangpräfixen definieren, die bedeuten, dass ein anderes Wort definitiv danach geht und es gierig erfasst.

ZB: Abgeordneter, hoch.

    
NikitOn 25.12.2016, 12:11
quelle
0

Mein R ist rostig, aber wenn ich einen ? nach einem Quantifizierer platziere, wird es in allen mir bekannten Regex-Engines nicht gierig, sondern gierig. So, um Ihre Hauptfrage zu beantworten:

  

Gibt es eine Möglichkeit, die Übereinstimmung vom Ende des Strings aus zu priorisieren, so dass dieses Muster mit last, middle, first übereinstimmt und dann alles andere für den Rang übrig lässt?

Sie sollten dies tun können, indem Sie den Rangvergleichsabschnitt des Musters nicht gierig machen, indem Sie nach dem ? ein + hinzufügen.

%Vor%

Vollständiges Muster:

%Vor%     
Nathan Loyer 07.12.2016 16:29
quelle

Tags und Links