Hallo Bernd,
vielen dank für den Tipp, aber leider kann ich es so nicht machen. Es sollen tatsächlich nur Strings ersetzt werden, in denen Zeilenumbrüche und/oder klammer(n) vorkommen. Sonst noch eine Idee?
Gruß,
Whitefurrows
QString::replace( )?
-
Whitefurrows
- Beiträge: 138
- Registriert: 1. Mai 2006 19:50
Hi,
nichts leichter als das
, bitteschön:
vorher
<1>Textteil1 <2>Textteil2
<3>Textteil3 <4>Textteil4
<5>Textteil5 <6>Textteil6
nachher
<b>(1)</b>Textteil1 <b>(2)</b>Textteil2</br>
<b>(3)</b>Textteil3 <b>(4)</b>Textteil4</br>
<b>(5)</b>Textteil5 <b>(6)</b>Textteil6
ich hoffe es ist so verständlich, wenn nicht einfach nochmal nachfragen!
Gruß,
Whitefurrows
nichts leichter als das
vorher
<1>Textteil1 <2>Textteil2
<3>Textteil3 <4>Textteil4
<5>Textteil5 <6>Textteil6
nachher
<b>(1)</b>Textteil1 <b>(2)</b>Textteil2</br>
<b>(3)</b>Textteil3 <b>(4)</b>Textteil4</br>
<b>(5)</b>Textteil5 <b>(6)</b>Textteil6
ich hoffe es ist so verständlich, wenn nicht einfach nochmal nachfragen!
Gruß,
Whitefurrows
Hi,
sowas ?
cu, Bernd
--
sowas ?
cu, Bernd
--
Code: Alles auswählen
QRegExp rx("<([^<>]*)>");
QRegExp rx2("([\r\n])");
QString test("<1>Textteil1 <2>Textteil2\n<3>Textteil3 <4>Textteil4\n<5>Textteil5 <6>Textteil6\n");
qDebug() << test.replace(rx, "<b>(\\1)</b>").replace(rx2,"</br>\\1");
-
Whitefurrows
- Beiträge: 138
- Registriert: 1. Mai 2006 19:50
Hallo,
ja genau so, bis auf den kleinen Fehler, das auch bei Strings die keine Klammern enthalten auch ein "<br>" hinzugefügt wird. Genau das wollte ich vermeiden, indem ich den Ausdruck mit einem UND Verknüpfe, da ich später in der Schleife zwischen HTML-Text und Plain-Text unterscheide. Wie kann ich den die zwei Ausdrücke mit einem UND Verknüpfen oder geht das nicht?
Gruß,
Whitefurrows
P.S.
Finde ich super wie du deine Beiträge schreibst, durch die Beispiele ist es immer gleich verständlich was du meinst!
ja genau so, bis auf den kleinen Fehler, das auch bei Strings die keine Klammern enthalten auch ein "<br>" hinzugefügt wird. Genau das wollte ich vermeiden, indem ich den Ausdruck mit einem UND Verknüpfe, da ich später in der Schleife zwischen HTML-Text und Plain-Text unterscheide. Wie kann ich den die zwei Ausdrücke mit einem UND Verknüpfen oder geht das nicht?
Gruß,
Whitefurrows
P.S.
Finde ich super wie du deine Beiträge schreibst, durch die Beispiele ist es immer gleich verständlich was du meinst!
Hi,
Du brauchst hier IMHO zwei Ersetzungen da Du auch mehrere <...> in einer Zeile haben kannst. Gleichzeitiges Ersetzen mehrerer <...> und eines \n bekomme zu mindestens ich nicht mit einem RegExp hin.
Wenn in einem String mehrere Zeilen sein können, von denen einige <...> enthalten, andere nicht und nur bei den Ersteren der \n ersetzt werden soll brauchst Du M.E. in rx2 eigentlich einen positiven Lookbehind. Da QRegExp das nicht kann muss man sich wohl mit einem positiven Lookahead und einem Zwischenspeicher behelfen. Damit bin ich dann aber auch an den Grenzen meiner 'RegExp-Kenntnisse' angelangt ...
Ansonsten (alle \n eines String ersetzen wenn in mindestens einer Zeile ein <...> vorkommt) könnte man vor dem Ersetzen auch einfach testen, ob rx überhaupt matched.
Alternativ (ohne dem Lookahead) könnte man den String bestimmt auch an den Zeilengrenzen in eine QStringList splitten, dort zeilenweise ersetzen, ggf. einen </br> anfügen und das Ganze dann wieder Joinen.
Versuch's mal hiermit, mit dem Lookahead habe ich eine Weile gekämpft
HTH, Bernd
--
Du brauchst hier IMHO zwei Ersetzungen da Du auch mehrere <...> in einer Zeile haben kannst. Gleichzeitiges Ersetzen mehrerer <...> und eines \n bekomme zu mindestens ich nicht mit einem RegExp hin.
Wenn in einem String mehrere Zeilen sein können, von denen einige <...> enthalten, andere nicht und nur bei den Ersteren der \n ersetzt werden soll brauchst Du M.E. in rx2 eigentlich einen positiven Lookbehind. Da QRegExp das nicht kann muss man sich wohl mit einem positiven Lookahead und einem Zwischenspeicher behelfen. Damit bin ich dann aber auch an den Grenzen meiner 'RegExp-Kenntnisse' angelangt ...
Ansonsten (alle \n eines String ersetzen wenn in mindestens einer Zeile ein <...> vorkommt) könnte man vor dem Ersetzen auch einfach testen, ob rx überhaupt matched.
Code: Alles auswählen
If (rx.indexIn(test) > -1)Versuch's mal hiermit, mit dem Lookahead habe ich eine Weile gekämpft
HTH, Bernd
--
Code: Alles auswählen
QRegExp rx("<([^<>]*)>");
QRegExp rx2("(?=[^\\n\\r]*<b>\\(\\d+\\)</b>)([^\\n\\r]*)([\\r\\n])");
QString test("<1>Textteil1 <2>Textteil2\nTextteil3 Textteil4\n<5>Textteil5 <6>Textteil6\n");
qDebug() << test.replace(rx, "<b>(\\1)</b>").replace(rx2,"\\1</br>\\2");
-
Whitefurrows
- Beiträge: 138
- Registriert: 1. Mai 2006 19:50