Frage

Ich versuche, eine Regex zu schreiben, die den gesamten Inhalten eines Tags entspricht, abzüglich einer führenden oder nachfolgenden Whitespace. Hier ist ein gekochtes Beispiel für die Eingabe:

<tag> Text </tag>

Ich möchte nur, dass das Folgende übereinstimmt (beachten Sie, wie die Whitespace vor und nach dem Match abgeschnitten wurde):

"Text"

Ich versuche derzeit, diesen Regex in .NET (PowerShell) zu verwenden:

(?<=<tag>(\s)*).*?(?=(\s)*</tag>)

Dieser Regex entspricht jedoch dem "Text" plus dem führenden Whitespace innerhalb des Tags, der unerwünscht ist. Wie kann ich meine Regex wie erwartet so reparieren?

War es hilfreich?

Lösung

Lassen Sie die Aussehen fallen; Sie machen den Job nur komplizierter, als er sein muss. Verwenden Sie stattdessen eine erfassende Gruppe, um das gewünschte Teil auszuwählen:

<tag>\s*(.*?)\s*</tag>

Das gewünschte Teil, den Sie wollen, ist verfügbar als $matches[1].

Andere Tipps

Sie sollten Regext nicht verwenden, um HTML zu analysieren.

Verwenden Sie stattdessen einen Parser.

Ebenfalls:Regex zum Entfernen von Körper -Tag -Attributen (C#)

Auch auch: Regex übereinstimmen offene Tags außer xhtml in sich geschlossene Tags

Wenn Sie alles nicht überzeugt, verwenden Sie den Punkt nicht in der Mitte Ihres Ausdrucks. Verwenden Sie die alphanumerische Flucht. Ihr Punkt verbraucht Weißespace. Verwenden Sie stattdessen W (glaube ich).

Verwenden Sie diese regelmäßigen Ausdrücke, um die Nachverfolgung und die Führung von Whitespaces zu entfernen. /^\s+/ und /\s+$/

        test = "<tag>     test    </tag>";
        string pattern3 = @"<tag>(.*?)</tag>";
        Console.WriteLine("{0}", Regex.Match(test,pattern3).Groups[1].Value.Trim());
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top