Beispiel: Ersetzen von Text mit Hilfe von Regular Expressions

www.altova.com Dieses Kapitel drucken Vorherige Seite Eine Ebene nach oben Nächste Seite

Startseite >  Vergleichen von Dateien > Suchen und Ersetzen von Text >

Beispiel: Ersetzen von Text mit Hilfe von Regular Expressions

In diesem Beispiel wird gezeigt, wie Sie Text mit Hilfe von Regular Expressions suchen und ersetzen können. In vielen Fällen ist das Suchen und Ersetzen von Text unkompliziert und es werden dafür keine Regular Expressions benötigt. Es gibt jedoch Fälle, in denen Sie Text auf eine Art und Weise bearbeiten müssen, wie es mit der normalen Such- und Ersetzungsoperation nicht möglich ist, z.B. wenn Sie eine XML-Datei mit mehreren tausend Zeilen haben, in der Sie bestimmte Elemente in einer einzigen Operation umbenennen müssen, ohne dabei den darin enthaltenen Inhalt zu ändern. Ein weiteres Beispiel: Sie müssen die Reihenfolge mehrerer Attribute eines Elements ändern. Hier sind Regular Expressions hilfreich, da Sie sich damit eine Menge Arbeit ersparen.

 

Beispiel 1: Umbenennen von Elementen

Der unten gezeigte XML-Beispielcode enthält eine Liste von Büchern. Angenommen, Sie möchten das Element <Category> jedes Buchs durch <Genre> ersetzen. Ein der Methoden, mit denen Sie dies erreichen, ist mit Hilfe von Regular Expressions.

 

<?xml version="1.0" encoding="UTF-8"?>
<books xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="books.xsd">
  <book id="1">
    <author>Mark Twain</author>
    <title>The Adventures of Tom Sawyer</title>
    <category>Fiction</category>
    <year>1876</year>
  </book>
  <book id="2">
    <author>Franz Kafka</author>
    <title>The Metamorphosis</title>
    <category>Fiction</category>
    <year>1912</year>
  </book>
  <book id="3">
    <author>Herman Melville</author>
    <title>Moby Dick</title>
    <category>Fiction</category>
    <year>1851</year>
  </book>
</books>

 

Gehen Sie dazu folgendermaßen vor:

 

1.Drücken Sie Strg+H, um das Such- und Ersetzungsdialogfeld aufzurufen.
2.Klicken Sie auf die Schaltfläche Regular Expressions verwenden _ic_find_regex.
3.Geben Sie in das Suchfeld den folgenden Text ein: <category>(.+)</category> . Mit dieser Regular Expression werden alle category-Elemente gefunden und markiert.

inc-RegexExample01

Um den Text im Inhalt der einzelnen Elemente zu suchen (der im Vorhinein nicht bekannt ist), haben wir den getaggten Ausdruck (.+) verwendet. Der getaggte Ausdruck (.+) bedeutet, "finde eine oder mehrere Instanzen eines beliebigen Zeichens, welches .+ entspricht, und merke Dir diese Übereinstimmung". Wie Sie im nächsten Schritt sehen, benötigen wird die Referenz auf den getaggten Ausdruck später.

 

4.Geben Sie in das Ersetzungsfeld den folgenden Text ein: <genre>\1</genre> . Mit dieser Regular Expression wird der Ersetzungstext definiert. Beachten Sie, dass darin eine Rückreferenz \1 auf den vorhin im Suchfeld getaggten Ausdruck verwendet wird, d.h. \1 bedeutet in diesem Zusammenhang "der Textinhalt der aktuellen <category>-Elementübereinstimmung".
5.Klicken Sie auf Alle ersetzen _ic_regex_replaceall und überprüfen Sie die Ergebnisse. Alle category-Elemente wurden nun, wie geplant, in genre umbenannt.

 

Beispiel 2: Ändern der Reihenfolge von Attributen

Der unten gezeigte XML-Beispielcode enthält eine Liste von Produkten. Jedes Produktelement hat zwei Attribute: id und size. Angenommen, Sie möchten die Reihenfolge der Attribute id und size in allen product-Elementen ändern (d.h. das Attribut size soll vor id stehen). Eine der Lösungsmethoden dafür ist mittels Regular Expressions.

 

<?xml version="1.0" encoding="UTF-8"?>
<products xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="products.xsd">
  <product id="1" size="10"/>
  <product id="2" size="20"/>
  <product id="3" size="30"/>
  <product id="4" size="40"/>
  <product id="5" size="50"/>
  <product id="6" size="60"/>
</products>

 

Gehen Sie dazu folgendermaßen vor:

 

1.Drücken Sie Strg+H, um das Such- und Ersetzungsdialogfeld aufzurufen.
2.Klicken Sie auf die Schaltfläche Regular Expressions verwenden _ic_find_regex.
3.Geben Sie ins Suchfeld den folgenden Ausdruck ein: <product id="(.+)" size="(.+)"/> . Mit dieser Regular Expression wird ein product-Element im XML-Dokument gefunden. Beachten Sie, dass zwei Mal ein getaggter Ausdruck (.+) verwendet wird, um den Wert der einzelnen Attribute (der im Vorhinein nicht bekannt ist) zu finden. Mit dem getaggten Ausdruck (.+) wird der Wert jedes einzelnen Attributs gefunden (Der Wert wird als eine oder mehrere Instanzen eines beliebigen Zeichens angenommen, also .+ ).
4.Geben Sie in das Ersetzungsfeld den folgenden Ausdruck ein: <product size="\2" id="\1"/> . Diese Regular Expression enthält den Ersetzungstext für jedes gefundene product-Element. Beachten Sie, dass darin zwei Referenzen \1 und \2 verwendet werden. Diese entsprechen den getaggten Ausdrücken aus dem Suchfeld. Anders ausgedrückt, bedeutet \1 "der Wert des Attributs id" und \2 "der Wert des Attributs size".

inc-RegexExample02

6.Klicken Sie auf Alle ersetzen _ic_regex_replaceall und überprüfen Sie die Ergebnisse. Alle product-Elemente wurden nun aktualisiert, so dass das Attribut size jetzt vor dem Attribut id steht.

© 2019 Altova GmbH