staging.inyokaproject.org

regulärer Ausdruck: Tags am Ende eines Strings entfernen

Status: Ungelöst | Ubuntu-Version: Ubuntu 16.04 (Xenial Xerus)
Antworten |

Chroman

Anmeldungsdatum:
1. Juli 2006

Beiträge: 568

Hallo zusammen,

ich habe ein Problem mit regulären Ausdrücken. Ich lese Strings ein die oft am Ende störende <br>-Tags enthalten. Mitten im String sind diese ok, jedoch am Ende eines Strings stören diese. Daher wollte ich diese mittels regulärer Ausdruck entfernen.

Beispiel:

Teststring1: Leider kenne ich mich mit<br /> regulären Ausdrücken nicht so gut aus.<br /><br />
Teststring2: Leider kenne ich mich mit<br /><br /> regulären Ausdrücken nicht so gut aus.<br />

In beiden Fällen soll am Ende rauskommen:

Teststring1: Leider kenne ich mich mit<br /> regulären Ausdrücken nicht so gut aus.
Teststring2: Leider kenne ich mich mit<br /><br /> regulären Ausdrücken nicht so gut aus.

Meine Überlegungen: Ich benötige einen Anker um am Ende des Strings zu suchen. Dafür nimmt man das $-Zeichen. Jetzt müsste ich noch einen Ausdruck haben um zu sagen, dass es egal ist wie oft das <br /> am Ende vorkommt. Dafür würde sich z. B. {min,max} anbeiten mit der Schreibweise {1,} was bedeutet min. einmal oder öfter.

Wie ich das ganze jetzt in einem regulären Ausdruck zusammen fasse der auch funktioniert weiß ich leider nicht. Ich habe auch schon eingie Dinge probiert die erfolglos waren.

Habt ihr eine Idee?

Danke für eure Hile!

Bearbeitet von rklm:

Codeblöcke. Du bist schon ganz schön lange auf der Plattform, bitte mach Dich doch mal mit den Möglichkeiten der Syntax vertraut!

seahawk1986

Anmeldungsdatum:
27. Oktober 2006

Beiträge: 11278

Man könnte sed mehrfach drüber laufen lassen, bis es keine Ersetzung mehr gibt:

1
2
3
4
5
6
7
8
test1='Leider kenne ich mich mit<br /> regulären Ausdrücken nicht so gut aus.<br /><br />'
test2='Leider kenne ich mich mit<br /><br /> regulären Ausdrücken nicht so gut aus.<br />'

sed -e ':loop' -e 's|<br />$||'  -e 't loop' <<< $test1
Leider kenne ich mich mit<br /> regulären Ausdrücken nicht so gut aus.

sed -e ':loop' -e 's|<br />$||'  -e 't loop' <<< $test2
Leider kenne ich mich mit<br /><br /> regulären Ausdrücken nicht so gut aus.

Edit: ich habe die Wiederholung in der Mitte des Satzes vergessen - dann so:

1
2
3
4
sed -e ':loop' -e 's|<br /><br />|<br />|g'  -e 't loop' -e 's|<br />$||' <<< $test1
Leider kenne ich mich mit<br /> regulären Ausdrücken nicht so gut aus.
sed -e ':loop' -e 's|<br /><br />|<br />|g'  -e 't loop' -e 's|<br />$||' <<< $test2
Leider kenne ich mich mit<br /> regulären Ausdrücken nicht so gut aus.

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17630

Ich denke die Wiederholung in der Mitte des Strings soll gerade unangetastet bleiben.

1
2
3
sed -r "s|(<br />)+$||" brtags.txt 
Leider kenne ich mich mit<br /> regulären Ausdrücken nicht so gut aus.
Leider kenne ich mich mit<br /><br /> regulären Ausdrücken nicht so gut aus.

Das -r erlaubt das Verwenden von runden Klammern, um einen längeren Ausdruck zu kapseln, ohne die Klammern zu maskieren. Statt + könnte man auch {1,} benutzen, aber + ist doch sehr viel übersichtlicher.

Antworten |