Hallo Ernst,
der nachfolgende RexExp sollte funktionieren:
^(?!\d{4}-\d{2}-\d{2}).*?$|^(\d{4}-\d{2}-\d{2}[a-zA-Z0-9
\Q^°"²§³$%&/{([)]=}?\`´@€*+~'#<>|;,:.-_\E])
ERLÄUTERUNG
Das Datum habe die Form: AAAA-BB-CC mit A,B,C = Ziffer
Der RegExp besteht aus 2 Teilen, getrennt durch "|" (bedeutet ODER):
"^(?!\d{4}-\d{2}-\d{2}).*?$" und "^(\d{4}-\d{2}-\d{2}[a-zA-Z0-9
\Q^°"²§³$%&/{([)]=}?\`´@€*+~'#<>|;,:.-_\E])"
LINKER TEIL
"^(?!\d{4}-\d{2}-\d{2}).*?$"
Basiert auf der Anwendung von "negative look-ahead assertion".
"negative look-ahead assertion" funktioniert - im Sinne von "etwas
finden" - aber nur, wenn ".*?$" angehängt ist.
Siehe:
https://ngb.to/threads/erledigt-regul%C3%A4re-ausdr%C3%BCcke-negieren.1559/#post-35642
Das angehängte ".*?$" hat aber zur Folge, dass Ausdrücke mit Zeichen
nach "CC" nicht gefunden werden.
RECHTER TEIL
"^(\d{4}-\d{2}-\d{2}[a-zA-Z0-9
\Q^°"²§³$%&/{([)]=}?\`´@€*+~'#<>|;,:.-_\E])"
Dieser Teil dient dazu, alles zu finden, bei dem nach "CC" noch ein
weiteres Zeichen vorkommt.
Buchstaben "a-zA-Z", Ziffern "0-9", Leerzeichen " " und alle
Sonderzeichen auf der Tastatur "^°"²§³$%&/{([)]=}?\`´@€*+~'#<>|;,:.-_"
(das sind hier alle Zeichen zwischen "\Q" und "\E").
"\Q ... \E" bedeutet, dass alle Zeichen dazwischen automatisch mit "\"
maskiert werden. Manche Sonderzeichen haben eine Steuerfunktion. Damit
diese als Zeichen erkannt werden, muss man sie mit "\" maskieren. Damit
man sich nicht merken muss, welche Zeichen maskiert werden müssen, kann
man auch einfach alle Sonderzeichen maskieren.
TEST
Ein paar Beispiele, mit denen ich getestet habe:
1111-22-33
1111-22-33
11110-22-33
1111-220-33
1111-22-330
1111+22+33
1111-22-3A
1111-22-33?C1
111X+2X2
1111-22-33_
1111-22-33"
Bis auf die 1. Zeile wird alles gefunden.
Die 2. Zeile wird gefunden, weil da noch - in der CALC-Tabelle - ein
rechtsbündiges Leerzeichen angefügt ist.
HINWEISE
Vielleicht gibt es für den rechten Teil auch noch eine
elegantere/kürzere Formulierung ...
Der RegExp ist zwar etwas länger, aber wenn man ihn in eine eine
TEXT-Datei kopiert, kann man ihn einfach in die Zwischenablage kopieren
und dann bei "Suchen und ersetzen" in die "Suchen"-Zeile rein-kopieren.
Häkchen bei "Reguläre Ausdrücke" setzen NICHT VERGESSEN !!!
Mit dem RegExp (s.o.) findest Du aber nur Datumsangaben, die nicht der
Form "AAAA-BB-CC" entsprechen. Inhaltlich falsche Datumsangabe, wo
beispielsweise der Februar 31 Tage hat, findest Du damit nicht.
Die RegExp-Programmiersprache basiert auf dem Grundprinzip etwas zu
finden, weshalb man mit regulären Ausdrücken immer nur etwas finden
kann, was zutrifft, aber nicht etwas, was NICHT zutrifft.
LIBRE OFFICE - HILFE
[...] Für eine vollständige Liste der unterstützenden Metazeichen und
Syntax siehe die ICU Dokumentation der regulären Ausdrücke (englisch)
<https://unicode-org.github.io/icu/userguide/strings/regexp.html>. [...]
Ich hoffe, das hilft Dir weiter,
Grüße
Hans-Werner ;-))
--
Liste abmelden mit E-Mail an: users+unsubscribe@de.libreoffice.org
Probleme? https://de.libreoffice.org/hilfe-kontakt/mailing-listen/abmeldung-liste/
Tipps zu Listenmails: https://wiki.documentfoundation.org/Netiquette/de
Listenarchiv: https://listarchives.libreoffice.org/de/users/
Datenschutzerklärung: https://www.documentfoundation.org/privacy
Context
- Re: [de-users] Negation in RegEx-Ausdrücken · OoOHWHOoO
Privacy Policy |
Impressum (Legal Info) |
Copyright information: Unless otherwise specified, all text and images
on this website are licensed under the
Creative Commons Attribution-Share Alike 3.0 License.
This does not include the source code of LibreOffice, which is
licensed under the Mozilla Public License (
MPLv2).
"LibreOffice" and "The Document Foundation" are
registered trademarks of their corresponding registered owners or are
in actual use as trademarks in one or more countries. Their respective
logos and icons are also subject to international copyright laws. Use
thereof is explained in our
trademark policy.