2017-03-09 4 views
0

Ich habe erfolglos Worten versucht, bis aus der im folgenden anhand der numerischen Zeichen zu extrahieren:Auszug nicht numerischen Zeichen zwischen HTML-Tags

<div class="text">hello there 234 44</div> 

Hier ist, was ich tue:

regex_name = re.compile(r'<div class="text">([^\d].+)</div>') 
+1

werden Sie eine Website kratzen? Wenn ja, gibt es Tools, um die Informationen ohne Regex zu finden. – MooingRawr

+6

Das sieht gefährlich aus wie [regex, um html zu parsen] (http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags). Versuchen Sie stattdessen [beautifulsoup] (https://www.crummy.com/software/BeautifulSoup/) als Ausgangspunkt? – roganjosh

+0

Angenommen, ich möchte lernen, wie man es in Regex macht :) – rearThing

Antwort

1

Sie kann wanna verwenden positive look-behind Behauptung

(?<=">)[^\d]+ 
^^^^^^^ 

sehen regex demo

Python (demo)

import re 

s = """<div class="text">A hawking party 64 x 48 1/2in (163 x 123.3cm)</div>""" 
r = r"(?<=\">)[^\d]+" 
o = re.findall(r, s) 
print o 
# ['A hawking party '] 
+0

Super !! Jetzt verstehe ich :) – rearThing

0
data = '<div class="text">A hawking party 64 x 48 1/2in (163 x 123.3cm)</div>' 
final ='' 
for i in data.replace('<div class="text">','').replace('</div>',''): 
    if not i.isdigit(): 
     final+= i 
    else: 
     break 
print final 

Ergebnisse in

A hawking party 
2

Als Ausgangspunkt, würde ich BeautifulSoup HTML parser verwenden Sie das gewünschte Element in der HTML zu finden Geben Sie den Text des Elements ein und extrahieren Sie ihn.

Dann würde ich itertools.takewhile() verwenden, um alle Zeichen in einer Zeichenfolge zu erhalten, bis eine Ziffer erfüllt ist:

In [1]: from itertools import takewhile 

In [2]: from bs4 import BeautifulSoup 

In [3]: data = """<div class="text">hello there 234 44</div>""" 

In [4]: soup = BeautifulSoup(data, "html.parser") 

In [5]: text = soup.find("div", class_="text").get_text() 

In [6]: ''.join(takewhile(lambda x: not x.isdigit(), text)) 
Out[6]: u'hello there ' 
+0

ohne itertools data = '

hello there 234 44
' von bs4 import BeautifulSoup ('') .join ([ich für i in BeautifulSoup (Daten, 'html'). Get_text() wenn nicht i.isdigit() ]) – plasmon360

Verwandte Themen