Vielleicht könnten Sie diese Funktion verwenden:
def partition_by(pred, iterable):
current = None
current_flag = None
chunk = []
for item in iterable:
if current is None:
current = item
current_flag = pred(current)
chunk = [current]
elif pred(item) == current_flag:
chunk.append(item)
else:
yield chunk
current = item
current_flag = not current_flag
chunk = [current]
if len(chunk) > 0:
yield chunk
etwas hinzufügen dafür, ein <br />
Tag oder Newline zu überprüfen:
def is_br(bs):
try:
return bs.name == u'br'
except AttributeError:
return False
def is_br_or_nl(bs):
return is_br(bs) or u'\n' == bs
(oder was auch immer besser geeignet ist ... Ich bin nicht so gut mit BeautifulSoup.)
(für cs
Satz BeautifulSoup.BeautifulSoup(your_example_html).childGenerator()
ergeben Dann partition_by(is_br_or_nl, cs)
verwenden)
[[u'Company A'],
[<br />],
[u'\n123 Main St.'],
[<br />],
[u'\nSuite 101'],
[<br />],
[u'\nSomeplace, NY 1234'],
[<br />, u'\n', <br />, u'\n', <br />, u'\n', <br />],
[u'\nCompany B'],
[<br />],
[u'\n456 Main St.'],
[<br />],
[u'\nSomeplace, NY 1234'],
[<br />, u'\n', <br />, u'\n', <br />, u'\n', <br />]]
Das sollte leicht genug zu verarbeiten sein.
Um dies zu verallgemeinern, müssten Sie wahrscheinlich ein Prädikat schreiben, um zu prüfen, ob sein Argument etwas ist, das Ihnen wichtig ist ... Dann könnten Sie es mit partition_by
verwenden, um alles andere in einen Topf zu werfen. Beachten Sie, dass die Dinge, die Ihnen wichtig sind, auch zusammengeballt werden - Sie müssen im Grunde jedes Element jeder zweiten Liste verarbeiten, die von dem resultierenden Generator erzeugt wird, beginnend mit dem ersten, der Dinge enthält, die Ihnen wichtig sind.
Danke für die Antwort, aber leider ist es nicht so einfach wie nur eine Regex verwenden. Ich habe das obige Dokument vereinfacht, um meine Frage besser zu veranschaulichen. Das tatsächliche Dokument hat ein Wirrwarr von HTML-Formatierungs-Tags und dergleichen. – jamieb
Aber Sie kümmern sich nicht um das Dokument, nur der Teil getrennt durch '
' Tags. Verwende BeatifulousSup, um diesen Teil zuerst zu extrahieren. –
Ich bin mir nicht sicher, warum jemand Ihre Antwort abgelehnt hat; Ich schätze die Hilfe. Ich werde ein paar Ideen basierend auf Ihrem Vorschlag versuchen. Ich hatte nur gehofft, dass BeautifulSoup das manuelle Parsen überflüssig gemacht hätte. Vielen Dank. – jamieb