Regex zu dem Tag -Inhalt entspricht und gleichzeitig die Führung und Nachfolgerin von Whitespace auslassen
-
26-09-2019 - |
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?
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());