2016-09-06 1 views
0

Gegeben ein Muster (https://regex101.com/r/iN9hG6/2), die N # von Hypern haben kann, wo ich den Text nach dem letzten möchte, wie würde ich verlangen, dass ich immer das bekomme zuerst:String nach dem letzten Hypen mit 1-N Hypens in Regex (Python)

<details>Fiction - Mystery - Duvall</details>

<details>Fiction - Mystery - Horror - Duvall</details>

Wo ich Duvall jeweils wollen.

Haftungsausschluss: für alle meine Fragen folgen, ich weiß, das

Finding the last specific character type in a string

viel wie

aussieht, aber ich versuchte, diese Lösung ohne Erfolg anzuwenden. Womöglich nicht ganz als ein relativer Regex-Neuling zu verstehen, wollte einfach nicht, dass die Person, die das beantwortete, dachte, ich ignorierte sie und verlangte doppelte Arbeit.

+0

Sie brauchen nicht zu spezifisch zu sein, verwenden Sie so etwas wie '

* -.? \ S * ([^ -]? *)
' https://regex101.com/r/iN9hG6/ 8 – sln

Antwort

0

Ich denke, was Sie ‚für neu sucht, ist dies:

<details>(?:\w+ - *)*(\w+)<\/details> 

die Idee ist, so viel wie möglich passen innerhalb der (?) Gruppe, die gemacht wird, keine Rückreferenzierung dazu führen, dann das Ding y entspricht Sie kümmern sich eigentlich um - das letzte Token. Das folgende Beispiel sollte ein wenig mehr Einblick in die Syntax geben.

Example

+0

Wenn ich mich nicht irre, dann bekommt dieses Beispiel immer alles nach dem ersten '-' was auch meine Mine macht. In jedem Fall sollte es "Duvall" – user3649739

+0

OIC zurückgeben, das Beispiel, das Sie zur Verfügung gestellt haben, funktionierte nicht, nicht sicher, ob Sie aktualisieren wollten, aber ich fügte Ihr Muster '

(?: \ W + - *) * (\ w +) <\/details>' in und dann aktualisiert die Probe regex https://regex101.com/r/iN9hG6/4 und es funktioniert perfekt. – user3649739

+0

Eine Sache, die ich bemerkte, ist, dass es an einem letzten Wort arbeitet, aber nicht an letzten Worten, z. 'Duvall McNiel', also die Saite nach dem letzten Hypn vs dem Wort siehe hier: https://regex101.com/r/iN9hG6/5 – user3649739

0

Nach den bereitgestellten Beispieleingangsdaten, ist dies eine XML und soll mit spezialisierten Tool wie xml.etree.ElementTree oder lxml analysiert werden. Um zu den Daten nach dem ersten Bindestrich, wir str.split() Bereitstellung der maxsplit Wert von 1 und immer das letzte Element des Ergebnisses verwenden werden:

import xml.etree.ElementTree as ET 

data = """ 
<root> 
    <details>Fiction - Mystery - Duvall</details> 
    <details>Fiction - Mystery - Horror - Duvall</details> 
</root>""" 

root = ET.fromstring(data) 
for details in root.findall("details"): 
    text = details.text 
    print(text.split(" - ", 1)[1]) 

Drucke:

Mystery - Duvall 
Mystery - Horror - Duvall 
0

Manchmal ist die Funktion split() einfacher als RegEx zu verwenden.

test_string = "<details>Fiction - Mystery - Horror - Duvall</details>" 
author = test_string.split("-")[-1][2:-10] 
Verwandte Themen