2009-09-04 3 views
17

Wie wenn ich eine Zeichenfolge wie str1 = "IWantToMasterPython"Wie extrahiert man eine Zeichenkette zwischen 2 anderen Zeichenketten in Python?

Wenn ich "Py" aus der obigen Zeichenfolge extrahieren möchten. Ich schreibe:

extractedString = foo("Master","thon") 

Ich möchte all dies tun, weil ich versuche, Texte von einer HTML-Seite zu extrahieren. Der Text wird wie folgt geschrieben: <div class = "lyricbox"> ....lyrics goes here....</div>.

Irgendwelche Vorschläge, wie ich umsetzen kann.

Antwort

30

Die Lösung ist einen regulären Ausdruck zu verwenden:

import re 
r = re.compile('Master(.*?)thon') 
m = r.search(str1) 
if m: 
    lyrics = m.group(1) 
+1

Schön beantwortet. Genau das, was ich wissen wollte. Thanx –

8
def foo(s, leader, trailer): 
    end_of_leader = s.index(leader) + len(leader) 
    start_of_trailer = s.index(trailer, end_of_leader) 
    return s[end_of_leader:start_of_trailer] 

dies wirft Valueerror wenn der Führer nicht in String s ist, oder der Anhänger nicht vorhanden ist danach (Sie haben nicht angegeben, welches Verhalten Unter solchen anomalen Bedingungen möchten Sie eine Exception auslösen, was eine ziemlich natürliche und pythonische Sache ist, die der Anrufer mit einem Versuch behandeln kann (es sei denn, er weiß, was in solchen Fällen zu tun ist).

Ein RE-basierter Ansatz ist ebenfalls möglich, aber ich denke, dass dieser pure String-Ansatz einfacher ist.

2

Wenn Sie Daten aus einer HTML-Seite extrahieren, würde ich Ihnen dringend die Verwendung der Bibliothek BeautifulSoup empfehlen. Ich habe es auch zum Extrahieren von Daten aus HTML verwendet und es funktioniert großartig.

11

BeautifulSoup ist der einfachste Weg, um zu tun, was Sie wollen. Es kann wie installiert werden:

sudo easy_install beautifulsoup 

Der Beispielcode zu tun, was Sie wollen, ist:

from BeautifulSoup import BeautifulSoup 

doc = ['<div class="lyricbox">Hey You</div>'] 
soup = BeautifulSoup(''.join(doc)) 
print soup.find('div', {'class': 'lyricbox'}).string 

Sie Python verwenden können urllib direkt Inhalte aus der URL zu greifen. Die Beautiful Soup doc ist auch hilfreich, wenn Sie etwas mehr analysieren möchten.

+1

Dies ist definitiv der richtige Weg dazu, für was er sagt, dass er es für verwendet. – wxs

+0

+1, Das hilft sehr ... danke – mshsayem

+1

Schön gesagt. Das war meine Absicht. Es hilft wirklich. –

2

können Sie auch versuchen, diese, wenn Sie das Vorkommen alle möchten in einer Liste ausgegeben:

import re 
str1 = "IWantToMasterPython" 

out = re.compile('Master(.*?)thon', re.DOTALL | re.IGNORECASE).findall(str1) 
if out : 
    print out 
Verwandte Themen