RegEx - wieder mal...

Stelle Fragen zur Programmierung mit Autohotkey

Moderator: jNizM

User avatar
Gucky_87
Posts: 375
Joined: 03 Jul 2014, 05:09

RegEx - wieder mal...

24 Jan 2017, 10:59

Huhu Leutz,

ich steh gerade auf´m Schlauch.
An sich hab ich ja mit Regex nicht sooo große Sorgen, aber diemal...

Ich möchte mit folgendem Text...

Code: Select all

#000034   24/01/2017   10:28   
UMSATZ 19 %      €18.00      )  
MWST   19 %       €2.87      Q  
NETTO  19 %      €15.13         
folgendes machen:

1) Jeder Textblock beginnt mit einer 4-6 stelligen Nummer (#000034), gefolgt von Datum und Uhrzeit. Den Anfang '#000034' (kann 4 - 6 Stellen haben) möchte ich erkennen (IF RegExMatch...)
2) Das letzte Zeichen in 'Umsatz' (Die Klammer) und 'MWST' (Das Q) sollen verschwinden. Problem: Es müssen nicht diese Zeichen sein. Es könnte auch mal eine 1 und ein | sein oder ein & und ein / (also beliebige alphanumerische Zeichen). Kriterium: Danach fogen IMMER 2 Spaces UND ein '`n'.
3) Die Beträge sollen alle rechtsbündig untereinander erscheinen, wobei es vorkommen KANN, dass das '€' Symbol auch mal mit von einem 'A_Space' gefolgt sein könnte und erst dann der Betrag kommt. Die Beträge sind aber immer mit 2 Nachkommastellen.

Meine Abfrage

Code: Select all

If(RegExMatch(Text, "#([\d\d\d\d|\d\d\d\d\d\d])    (\d\d)/(\d\d)/(\d\d\d\d) (\d\d):(\d\d):(\d\d)"))
klappt nicht und auch, wenn ich

Code: Select all

If(RegExMatch(Text, "#(\d{4,6})    (\d\d)/(\d\d)/(\d\d\d\d) (\d\d):(\d\d):(\d\d)"))
ausprobiere, führt das zu keinem Erfolg.
Das wichtigeste aber ist, dass Punkt 1 gelöst wird. Alles andere ist Nebensache.

Dank Euch wie immer im Voraus.

Gucky.
just me
Posts: 9451
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: RegEx - wieder mal...

24 Jan 2017, 11:21

Moin,

sind die Spaltentrenner Tabs oder Leerzeichen?

Edit: Die Uhrzeit für den Regex ist in Deinem Beispiel nur \d\d:\d\d.
User avatar
Gucky_87
Posts: 375
Joined: 03 Jul 2014, 05:09

Re: RegEx - wieder mal...

24 Jan 2017, 17:39

Ale Leerzeichen sind A_Spaces (echte Leerzeichen).
Im original besteht der text aus unendlich vielen Tab´s, Steuerzichen (NUL, ACK, etc. pp.), die ich aber alle bereits beim Einlesen herausfiltere und durch A_Space ersetze.
Übrig bleiben daher z.B. die ')' oder das 'Q', welche aber auch beliebige andere Zeichen sein können.

Im Prinzip muss ich nur das '#000000' in der 1. Zeile sicher herausfinden, denn daraus werden einzelne Datensätze gebildet. Diese Zahl kann aber #1234 oder #123456 sein (4 oder 6 stellig).
Abhängig davon sind dann natürlich zwischen '#1234' und dem Datum 2 Spaces mehr als bei einer 6 stelligen Nummer.
Die Uhrzeit hingegen kann '23:45* oder auch '0:30' sein (also 1 oder 2 Stellen vor dem ':'.

Was die Beträge angeht, KANN nach dem Euro betrag Schluss sein, also z.B. kann/soll aus

Code: Select all

UMSATZ 19 %      €18.00      )
später

Code: Select all

UMSATZ 19 %            €18.00
werden, d.h. jede Zeile, die Text enthält, soll dann 30 Zeichen lang werden.

Aber wie gesagt, das fummel ich mir alleine zurecht (lacht). Ich scheitere bereits
bei '#1234' oder '#123456' in der 1. Zeile.

Gucky.
just me
Posts: 9451
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: RegEx - wieder mal...

25 Jan 2017, 03:56

Code: Select all

Text =
(Join`n %
#000034   24/01/2017   10:28
UMSATZ 19 %      €18.00      )
MWST   19 %       €2.87      Q
NETTO  19 %      €15.13
)

If RegExMatch(Text, "m`n)^#\d{4,6}\s+\d{2}/\d{2}/\d{4}\s+\d{1,2}:\d{2}\s*$", Match)
   MsgBox, %Match%
Else
   MsgBox, Mismatch!
?

Return to “Ich brauche Hilfe”

Who is online

Users browsing this forum: No registered users and 66 guests