[GastForen Programme Print/Bildbearbeitung Adobe InDesign Grep, Zeichenfolge ausschliesen

  • Suche
  • Hilfe
  • Lesezeichen
  • Benutzerliste
Print/Bildbearbeitung - Photos, Layout, Design
Themen
Beiträge
Moderatoren
Letzter Beitrag

Grep, Zeichenfolge ausschliesen

Thaler
Beiträge gesamt: 139

13. Jul 2016, 09:17
Beitrag # 1 von 12
Bewertung:
(3886 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hi,
ich möchte mit Grep einen Zeichenabfolge suchen, in der eine bestimmte Zeichenfolge ausgeschlossen wird. Beispiel:

<li>nicht anwendbar</li>
<li>< 3x105 Ohm</li>
<li>Wasser in frischem ...</li>

es sollen zwei aufeinanderfolgende < gefunden werden, innerhalb deren sich nicht die Zeichenfolge > befindet.

Ich habe es mit <.*?(?!>).*?< versucht, klappt aber nicht. Ich weiß, dass ist jetzt kein unmittelbares indesig-Problem, aber vielleicht erbarmt sich dennoch jemand und hilft mir weiter.

Gregor
X

Grep, Zeichenfolge ausschliesen

Martin Fischer
  
Beiträge gesamt: 12783

13. Jul 2016, 09:55
Beitrag # 2 von 12
Beitrag ID: #551134
Bewertung:
(3862 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Gregor,

nur zur Sicherheit:
Meinst Du tatsächlich die Zeichen
Code
<  
li>
/li>


Oder hat die Forensoftware hier Sonderzeichen anders umgesetzt.

Wenn Letzteres, kannst Du das Beispiel nochmals im Code-Tag eingebettet schicken?


als Antwort auf: [#551132]

Grep, Zeichenfolge ausschliesen

Kai Rübsamen
  
Beiträge gesamt: 4684

13. Jul 2016, 10:13
Beitrag # 3 von 12
Beitrag ID: #551135
Bewertung:
(3844 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo!

Dein GREP findet in der zweiten Zeile nur bis zum ersten Vorkommen.

Mir ist jetzt nicht klar, ob diese Zeile überhaupt nicht gefunden oder ob auch hier das letzte Vorkommen gefunden werden soll?!

Wenn letzteres, dann sollte '(<).+\1' funktionieren.

Wenn die Aufgabe anders lautet, braucht es mehr Infos. Steht das erste Vorkommen immer am Absatzanfang? Kommt nach dem letzten Vorkommen immer ein "/" ?


als Antwort auf: [#551134]

Grep, Zeichenfolge ausschliesen

Thaler
Beiträge gesamt: 139

13. Jul 2016, 11:09
Beitrag # 4 von 12
Beitrag ID: #551136
Bewertung:
(3812 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Martin, hallo Kai,
es handelt sich nicht um ein Problem der Forensoftware.

Hintergrund: aus einer Datenbank wird xhtml exportiert. Diese DB löst zwingend alle "<" und ">" in Entities auf )-:

Aus
<li>nicht anwendbar</li>
<li>&lt; 3x105 Ohm</li>
<li>Wasser in frischem ...</li>
wird
&lt;li&gt;nicht anwendbar&lt;/li&gt;
&lt;li&gt;&lt; 3x105 Ohm&lt;/li&gt;
&lt;li&gt;Wasser in frischem ...&lt;/li&gt;

Diese exportierten Daten müssen mit xslt transformiert werden. Damit dies funtioniert, muss ich das "Kleiner"-Zeichen entschärfen. Es sollen zwei aufeinanderfolgende &lt; gefunden werden, innerhalb deren sich nicht die Zeichenfolge &gt; befindet.
Gregor


als Antwort auf: [#551132]

Grep, Zeichenfolge ausschliesen

Kai Rübsamen
  
Beiträge gesamt: 4684

13. Jul 2016, 11:56
Beitrag # 5 von 12
Beitrag ID: #551138
Bewertung:
(3787 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Gregor, es ist offensichtlich schwierig ein Beispiel zu liefern, dass auch alle verstehen?!

Mir ist das mit der zweiten Zeile immer noch nicht klar. Mach bitte einen Screenshot von Ist und Soll. Danke.

edit: Wenn du einfach nur das entity wieder in "<" zurückwandeln willst, geht wahrscheinlich auch schon die Variante wie im beigefügten Screen. Wenn man noch mehr Zeichen ausschließen will, erweitert man einfach die Zeichenklassen, z.B. '(?<![;>])&lt;'


als Antwort auf: [#551136]
(Dieser Beitrag wurde von Kai Rübsamen am 13. Jul 2016, 12:06 geändert)

Anhang:
Bildschirmfoto 2016-07-13 um 12.02.31.png (53.6 KB)

Grep, Zeichenfolge ausschliesen

Thomas Richard
Beiträge gesamt: 19337

13. Jul 2016, 12:39
Beitrag # 6 von 12
Beitrag ID: #551140
Bewertung:
(3733 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Ich verstehe es so, dass einfach alleinstehende ;lt oder ;gt nicht gefunden werden sollen, aber solche um ein li oder /li herum schon.

Der Versuch, den kompletten Ausdruck der ursprünglich mit < > ausgezeichnet war, zu suchen, halte ich für problematisch. Ich würde mich nur auf die Suche nach den konkret ersetzten <li> und </li> machen, um sie eben wieder zu dem zu machen, was sie mal waren.


als Antwort auf: [#551138]

Grep, Zeichenfolge ausschliesen

Thaler
Beiträge gesamt: 139

13. Jul 2016, 13:33
Beitrag # 7 von 12
Beitrag ID: #551143
Bewertung:
(3699 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Kai,
so sorry, dass ich mich unverständlich ausgedrückt habe.
Aus
&lt;li&gt;nicht anwendbar&lt;/li&gt;
&lt;li&gt;&lt; 3x105 Ohm&lt;/li&gt;
&lt;li&gt;Wasser in frischem ...&lt;/li&gt;

soll
&lt;li&gt;nicht anwendbar&lt;/li&gt;
&lt;li&gt;&amp;lt; 3x105 Ohm&lt;/li&gt;
&lt;li&gt;Wasser in frischem ...&lt;/li&gt;

werden

Noch eine Anmerkung: Im angeführten Beispiel handelt es sich ursprünglich um <li> Elemente. Es könnte sich aber auch um andere Elemente wie <p> handeln.

Das Problem ist das in xml im Text kein "<" vorkommen darf. Wenn ich alle "&lt;" in "<" umwandele, funktionierts nicht mit xslt. Also muss ich das "&lt;" im Text zu "&amp;lt;" entschärfen.

Gregor


als Antwort auf: [#551138]

Grep, Zeichenfolge ausschliesen

Kai Rübsamen
  
Beiträge gesamt: 4684

13. Jul 2016, 13:50
Beitrag # 8 von 12
Beitrag ID: #551146
Bewertung:
(3690 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Zitat es sollen zwei aufeinanderfolgende &lt; gefunden werden, innerhalb deren sich nicht die Zeichenfolge &gt; befindet.


Ich verstehe es so:
Suche &lt;, wenn sich direkt davor &gt; befindet?
Falls ja, funktioniert das: '&gt;\K(&lt;)'


als Antwort auf: [#551143]

Grep, Zeichenfolge ausschliesen

Thaler
Beiträge gesamt: 139

13. Jul 2016, 14:58
Beitrag # 9 von 12
Beitrag ID: #551151
Bewertung:
(3622 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Kai,

vor dem gesuchten "&lt;" kann sich noch eine beliebige Zeichenfolge befinden.

Es soll ein "&lt;" gefolgt von einer beliebige Zeichenfolge ausser "&gt;" gefolgt von einer beliebige Zeichenfolge und dann "&lt;" gefunden werden.

&gt; ... &lt; ...&lt;

Gregor


als Antwort auf: [#551143]

Grep, Zeichenfolge ausschliesen

Kai Rübsamen
  
Beiträge gesamt: 4684

13. Jul 2016, 15:52
Beitrag # 10 von 12
Beitrag ID: #551152
Bewertung:
(3587 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Also, falls es jetzt das nicht ist, habe ich die Aufgabe immer noch nicht verstanden und gebe auf:

&lt;((?!&gt;).)+?&lt;


als Antwort auf: [#551151]

Grep, Zeichenfolge ausschliesen

Thaler
Beiträge gesamt: 139

13. Jul 2016, 15:58
Beitrag # 11 von 12
Beitrag ID: #551153
Bewertung:
(3574 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Kai,
genau das habe ich benötigt!
Vielen Dank für deine Mühe und verzeih, dass ich mich nicht klar ausgedrückt habe.

Gregor


als Antwort auf: [#551152]

Grep, Zeichenfolge ausschliesen

Kai Rübsamen
  
Beiträge gesamt: 4684

13. Jul 2016, 16:26
Beitrag # 12 von 12
Beitrag ID: #551154
Bewertung: ||
(3553 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Ach, könnte man doch für sowas eine Rechnung schreiben … aber man macht es ja gerne ;-)

Man sieht es dem GREP nicht an, aber ich hab einen Moment dafür gebraucht, daher will ich es erklären:

Gregors Anforderung schreit eigentlich nach

&lt;[^&gt;]+&lt;

Das Problem ist jetzt aber, das nicht '&gt;' negiert wird, sondern '&,g,t,;'. Also jedes Zeichen einzeln.

&lt;[^(&gt;)]+&lt;

Das funktioniert ebenfalls nicht, weil die runden Klammern innerhalb der eckigen ihre Bedeutung verlieren und daher wie literale Zeichen behandelt werden.

Lösung: &lt;((?!&gt;).)+?&lt;

Ein Lookahead kann entweder vor oder nach dem Suchausdruck stehen. Steht er davor, kann ich den Ausdruck 2x durchsuchen. Wichtig sind hier die runden Klammern! Durch den Punkt als beliebiges Zeichen wird quasi bei jedem Zeichen geprüft, ob links davon kein '&gt;' steht.


als Antwort auf: [#551153]
X