2016-04-12 10 views
-4

Ich habe eine sehr sehr große Zeichenfolge, die ein Protokoll von einem bestimmten System
Ich möchte nur den Teil, der mit <status> beginnt und endet mit </status>.
Ich habe gehört, dass RegEx Ausdruck ist ein guter Weg, aber ich weiß nicht wirklich, wie man es benutzt.
Irgendwelche Ideen?Get ein Teilstring innerhalb von zwei Strings

+0

Was wollen Sie mit dem Text in den Status so? – Sarcoma

+0

@sarcoma Ich möchte eine zufällige Zeile darin für den persönlichen Gebrauch drucken –

+0

Sie sollten Ihre Frage aktualisieren, um das zu reflektieren. – Sarcoma

Antwort

3
s = "Hello I am a very long string <status>I've got a lovely bunch of coconuts</status> here they are standing in a row" 
excerpt = s.partition("<status>")[2].rpartition("</status>")[0] 
print excerpt 

Ergebnis:

I've got a lovely bunch of coconuts 
+0

Das wird nicht ganz richtig, wenn es mehrere Abschnitte mit ' sind .... 'aber dies ist definitiv der effizienteste Weg, um diese Aufgabe zu erfüllen (vorausgesetzt, der gesamte Text wird in den Speicher geladen) –

0

Wenn nur ein Auftreten des <status> und </status> ist, dann können Sie string_name[string_name.index("<status>") + 8: string_name.index("</status>"] verwenden.

s = "test<status>test2</status>" 
print s[s.index("<status>") + 8: s.index("</status>"] 

Ausgang:

test2 
1

Wenn Sie regex versuchen wollen, hier ist ein Weg:

import re 

regex = re.compile(r"\<status\>(.*?)\</status\>", re.IGNORECASE) 
s = """This is some long random text <status>This is the first status block</status> 
and some more text <status>and another block</status> 
and yet more <status>This is the last status block</status>""" 
print(re.findall(regex, s)) 

Ausbeuten

['This is the first status block', 'and another block', 'This is the last status block'] 

Demo

Der Schlüssel Vorteil dieser Methode ist, dass es alle<status>...</status> Blöcke auf einer Linie extrahiert, nicht nur die erste. Beachten Sie, dass für Strings mit drei Anführungszeichen sowohl <status> als auch </status> in derselben Zeile stehen müssen.

Verwandte Themen