2016-09-06 1 views
-1

meine Eingabe ist:
<span question_number="18"> blah blah blah 1</span><span question_number="19"> blah blah blah 2</span>regex, die eine Teil unter Verwendung von negativen Lookarounds ausschließen könnte

und ich möchte, dass meine regex dieses <span question_number="somenumber">xxxx</span> Muster
und die gewünschte Ausgabe ist 1.somenumber 2.xxxx

übereinstimmen

ich schrieb eine naive Lösung, die
<span question_number="18"> blah blah blah 1</span>
<span question_number="19"> blah blah blah 2</span>
Hinweis decken könnte: sie sind auf verschiedenen Linien
der Ausgang ist: 18, blah blah blah 1 und 19, blah blah blah 2

aber wenn der Eingang <span question_number="18"> blah blah blah 1</span><span question_number="19"> blah blah blah 2</span>
, die auf der gleichen Linie ist

meine Ausgabe 18 ist, blah blah blah 1</span><span question_number="19"> blah blah blah 2

Wie könnte ich dieses Problem umgehen?

Update: regex: \<span question_number=(?:\")*(\d*)(?:\")*>(.*)<\/span>

testinput:
case1 -> zwei Zeilen Code
<span question_number="54">often graces doorways tied into ropes called</span>
<span question_number="54">often graces doorways tied into ropes called <i>ristras</i>.</span>
case2 -> eine Zeile Code
<span question_number="54">often graces doorways tied into ropes called</span><span question_number="54">often graces doorways tied into ropes called <i>ristras</i>.</span>

+2

Ungenügend Ihren Quantifizierer. '*?' statt nur '*'. Oder, noch besser, benutze Regex nicht, um HTML zu analysieren! –

+0

Können Sie uns Ihre Lösung zeigen? –

+0

@ExplosionPills könnten Sie bitte einen Blick haben? – MohanL

Antwort

2

Wenn Sie‘ Sie arbeiten bereits mit JavaScript/HTML, anstatt einen regulären Ausdruck zum Extrahieren zu verwenden Daten aus dem HTML-Format ist es in der Regel viel einfacher, DOM-Abfrage-Tools zu verwenden, die bereits im Browser verfügbar sind.

const d = document.createElement("div"); 
d.innerHTML = yourSpanContent; 

Array.from(d.querySelectorAll("span")).map(span => 
    `1. ${span.getAttribute("question_number")} 2. ${span.innerText}` 
); 

Wenn der HTML-Code, mit dem Sie arbeiten, bereits in einem DOM enthalten ist, können Sie aus diesem DOM auswählen und die ersten beiden Zeilen entfernen.

+0

@MohanL Sie müssen weitere Informationen in Ihre Frage aufnehmen, z. B. wie dieser HTML-Code generiert wird und wie Sie die Daten extrahieren. Ich bin mir nicht sicher, was du meinst "bevor ich das DOM erzeuge" –

0

Dies entspricht allem in einem span-Tag, unabhängig davon, wo es sich in einer Zeile befindet.

/(<span[^>]*>)[^<]*(<\/span>)/g 

Können Sie Ihren Code posten?

Verwandte Themen