Welche Regex würde eine verschachtelte Tabelle mit identifizierbarem Text in der Tabellenzelle überein?

StackOverflow https://stackoverflow.com/questions/1505277

  •  19-09-2019
  •  | 
  •  

Frage

Was regex wäre eine verschachtelte Tabelle mit identifizierbarem Text in der Tabellenzelle überein? Ich habe versucht, aber nicht mit einem regulären Ausdruck zu kommen, um die spezifische Tabelle extrahieren mag ich mit aus dem Anfang und das Ende der beiden Tabellen im Beispiel greifen. Hier ist etwas zu beginnen: „<table>.*?</table>

<table>
    <tr>
        <td>
            <table>
                <tr><td>Code1</td></tr>
                <tr><td>some data</td></tr>
                <tr><td>etc ...</td></tr>
            </table>
        </td>
    </tr>
    <tr>
        <td>
            <table>
                <tr><td>Code2</td></tr>
                <tr><td>some data</td></tr>
                <tr><td>etc ...</td></tr>
            </table>
        </td>
    </tr>
</table>

Sagen wir, ich möchte die Tabelle extrahieren mit „Code2“. Was regex wird speziell entsprechen und nur diese Tabelle?

War es hilfreich?

Lösung

Die folgende Regex finden Sie Ihre Tabelle:

(?ms)<table>((?!<table>).)*<td>Code2</td>.*?</table>

Mit (?ms) Sie einschalten „mehrzeiligen matches“ (m) und „Punkt Zeilenumbrüche passt auch“ (s). Dann haben Sie eine negative Vorschau (?!) um sicherzustellen, dass Sie keinen zweiten Start einer Tabelle in Ihrem Spiel hat.

Andere Tipps

Ich würde nicht einen regulären Ausdruck auf diese verwenden, da HTML nicht regelmäßig ist, und es gibt kein Ende der Kante Fällen Sie stolpert. Du bist besser dran einen HTML-Parser verwenden. Unabhängig davon, welche Sprache oder Plattform, die Sie verwenden, wird es eine zur Verfügung.

Sie keine regex verwenden. Verwenden Sie einen HTML-Parser!

Doch in Perl (vorausgesetzt, Sie haben keine verschachtelten Tabellen):

$xml =~ /<table>.*<td>Code2<\/td>.*<\/table>/s;
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top