Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
24.04.2024 17:19:09
Anzeige
Archiv - Navigation
1552to1556
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Frage Pattern(RegEx)

Frage Pattern(RegEx)
28.04.2017 16:10:56
hary
Moin Allezusammen
Hab eine Frage zu Pattern.
Meine Tabelle sieht so aus, durch reinkopieren steht leider alles in den Zellen der SpalteA.
Die X'en stehen fuer Buchstaben. Wobei grosses X gleich Grrossbuchstabe und kleines x fuer Kleinbuchstaben.
Was ich brauche ist: Gib alles raus was nur Grossbuchstaben hat,die Uhrzeit,die einzelne Zahl hinter der Uhrzeit und den Teil mit der Wochentagbezeichnung.



Tabelle1
 ABCDEFG
1Vorgabedas soll rauskommen     
2xxx x-62911 Di-Sa(nS) XXXX 0:56 2 XXXX Xx-XxxxxxXxxx Xx-Xxxxxx Xxx XXX 100Di-Sa(nS)XXXX00:562XXXXXXX
3X x X 66445 Mo XXXX 9:13 4 XXXX Xxxxxx Xxxxxxxxxx XXXX 140      
4XX X-52010 Mo-Fr(S) XXXX 19:15 1 XXX Xxxxxxx Xxxxxx Xxx XXXX 100      
5XXX X-52464 Di(S) XXXX 11:12 2 XXXX Xxxxxxx Xxx Xxxxxxxx 100      
6XX-X X-2448 So XXXX 22:57 1 XXX Xxxxx Xxx Xxxxxxxx Xxx XXXX 160      

http://excel-inn.de/dateien/vba_beispiele/tabellenanzeige_in_html_addin.zip
http://hajo-excel.de/tools.htm
XHTML-Tabelle zur Darstellung in Foren, einschl. der neuen Funktionen ab Version 2007
Add-In-Version 14.02 einschl 64 Bit

Irgendwo hab ich einen Wurm drin. Er nimmt nicht bei allen die Zeit raus. .Pattern = " \d |[A-Z]{2,} | \d+:\d+ " .Global = True Set objM = .Execute(Cells(b, 1).Text) If objM.Count > 0 Then ReDim out(1 To objM.Count) For i = 3 To objM.Count out(i) = objM(i - 1).Value Cells(b, i + 8) = out(i) Next
Hab es auch so probiert
.Pattern = "([A-Z]{2,})|( \d )|(\d+:\d+)"

Bei den Grossbuchstaben hab ich so vorgegeben [A-Z]{2,} also mindestens 2 Grossbuchstaben.
Bin nicht so Firm mit RegEx.
Mit Text in Spalten nuesste ich zuviel korregieren.
Schon mal Danke fuers gruebeln.
gruss hary

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Frage Pattern(RegEx)
28.04.2017 19:00:49
ransi
Hallo HAry
Was soll bei den anderen Zellen rauskommen?
ICh babs mal so gedeutet:
Tabelle1

 ABCDEFG
1Vorgabedas soll rauskommen     
2xxx x-62911 Di-Sa(nS) XXXX 0:56 2 XXXX Xx-XxxxxxXxxx Xx-Xxxxxx Xxx XXX 100Di-Sa(nS)XXXX0:562XXXXXXX
3X x X 66445 Mo XXXX 9:13 4 XXXX Xxxxxx Xxxxxxxxxx ABCD 140MoXXXX9:134XXXXABCD
4XX X-52010 Mo-Fr(S) XXXX 19:15 1 XXX Xxxxxxx Xxxxxx Xxx XXXX 100Mo-Fr(S)XXXX19:151XXXXXXX
5XXX X-52464 Di(S) XXXX 11:12 2 XXXX Xxxxxxx Xxx Xxxxxxxx 100      
6XX-X X-2448 So XXXX 22:57 1 XXX Xxxxx Xxx Xxxxxxxx Xxx ABCD 160SoXXXX22:571XXXABCD

Formeln der Tabelle
ZelleFormel
B2=machs($A2;SPALTE(A1))


Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4
' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Function machs(zelle As String, intIndex As Integer)
    Dim regex As Object
    Dim objMatch As Object
    Set regex = CreateObject("Vbscript.Regexp")
    With regex
        .Pattern = " (Mo|Di||Mi|Do|Fr|Sa|So) ([A-Z]{3,}) ([0-2]?[0-9]:[0-5][0-9]) ([0-9]+) ([A-Z]+).+ ([A-Z]+)( \d{3}$)"
        If .test(zelle) Then
            Set objMatch = .Execute(zelle)
            machs = objMatch(0).submatches(intIndex - 1)
            Exit Function
            Else:
            .Pattern = " (Mo.+?|Di.+?|Mi.+?|Do.+?|Fr.+?|Sa.+?|So.+?) ([A-Z]{2,}) ([0-2]?[0-9]:[0-5][0-9]) ([0-9]+) ([A-Z]+).+ ([A-Z]+)( \d{3}$)"
            If .test(zelle) Then
                Set objMatch = .Execute(zelle)
                machs = objMatch(0).submatches(intIndex - 1)
                Else:
                machs = ""
            End If
        End If
    End With
End Function


ransi
Anzeige
AW: Frage Pattern(RegEx)
29.04.2017 07:25:31
hary
Moin Ransi
Danke!! Hast du richtig gedeutet.
Das funzt super mit einem kleinem Haken(hab ich auch jetzt erst entdeckt),sry
Alles gut, nur wenn kein(e) Wochentag(e) gegeben sind wird nix angezeigt.



neu
 ABCD
308KT P-50398 HGGL 20:27 2 HLER Alte Süderelbe Dre-Friedrichst HBS 100   
309KT 50554 So HGGL 10:59 4 HHI Nür Rbf Ausfahrt Beddingen HBDD 120SoHGGL10:59
310KT 50558 Mo+Mi HGGL 10:30 4 HBDD Beddingen Alte Süderelbe HLER 100Mo+MiHGGL10:30

verwendete Formeln
Zelle Formel Bereich R1C1 für Add In
B308: D310=machs($A308;SPALTE(A308))  =machs(RC1,COLUMN(RC[-1]))

http://excel-inn.de/dateien/vba_beispiele/tabellenanzeige_in_html_addin.zip
http://hajo-excel.de/tools.htm
XHTML-Tabelle zur Darstellung in Foren, einschl. der neuen Funktionen ab Version 2007
Add-In-Version 14.02 einschl 64 Bit

Hab es gerade rumprobiert bekomme das aber nicht gebacken.
Kannst du mir nochmal unter die Arme greifen.
Anzeige
AW: sry, Frage noch offen owT
29.04.2017 07:26:43
hary
.
AW: sry, Frage noch offen owT
29.04.2017 09:58:18
ransi
HAllo,
Jetzt wirds kompliziert.
Teste mal:
Tabelle1

 ABCDEFGH
1KT P-50398 HGGL 20:27 2 HLER Alte Süderelbe Dre-Friedrichst HBS 100 HGGL20:272HLERHBS 
2KT 50554 So HGGL 10:59 4 HHI Nür Rbf Ausfahrt Beddingen HBDD 120SoHGGL10:594HHIHBDD 
3KT 50558 Mo+Mi HGGL 10:30 4 HBDD Beddingen Alte Süderelbe HLER 100Mo+MiHGGL10:304HBDDHLER 
4        

Formeln der Tabelle
ZelleFormel
B1=machs($A1;SPALTE(A1))


Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4
' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Function machs(zelle As String, intIndex As Integer)
    Dim regex As Object
    Dim objMatch As Object
    Set regex = CreateObject("Vbscript.Regexp")
    machs = ""
    With regex
        .Pattern = " (Mo|Di||Mi|Do|Fr|Sa|So) ([A-Z]{3,}) ([0-2]?[0-9]:[0-5][0-9]) ([0-9]+) ([A-Z]+).+ ([A-Z]+)(?= \d{3}$)"
        If .test(zelle) Then
            Set objMatch = .Execute(zelle)
            machs = objMatch(0).submatches(intIndex - 1)
            Exit Function
        End If
        
        .Pattern = " (Mo.+?|Di.+?|Mi.+?|Do.+?|Fr.+?|Sa.+?|So.+?) ([A-Z]{2,}) ([0-2]?[0-9]:[0-5][0-9]) ([0-9]+) ([A-Z]+).+ ([A-Z]+)(?= \d{3}$)"
        If .test(zelle) Then
            Set objMatch = .Execute(zelle)
            machs = objMatch(0).submatches(intIndex - 1)
            Exit Function
        End If
        
        .Pattern = "(\b)([A-Z]{3,}) ([0-2]?[0-9]:[0-5][0-9]) ([0-9]+) ([A-Z]+).+ ([A-Z]+)(?= \d{3}$)"
        If .test(zelle) Then
            Set objMatch = .Execute(zelle)
            machs = objMatch(0).submatches(intIndex - 1)
            Exit Function
        End If
        
    End With
End Function


ransi
Anzeige
3 verschiedene Pattern
29.04.2017 10:12:02
ransi
Hallo,
Geht bestimmt auch eleganter in einem .Pattern
Das bekomm ich aber nicht hin.
Tabelle1

 ABCDEFG
1KT P-50398 HGGL 20:27 2 HLER Alte Süderelbe Dre-Friedrichst HBS 100 HGGL20:272HLERHBS
2KT 50554 So HGGL 10:59 4 HHI Nür Rbf Ausfahrt Beddingen HBDD 120SoHGGL10:594HHIHBDD
3KT 50558 Mo+Mi HGGL 10:30 4 HBDD Beddingen Alte Süderelbe HLER 100Mo+MiHGGL10:304HBDDHLER
4xxx x-62911 Di-Sa(nS) XXXX 0:56 2 XXXX Xx-XxxxxxXxxx Xx-Xxxxxx Xxx XXX 100Di-Sa(nS)XXXX0:562XXXXXXX
5X x X 66445 Mo XXXX 9:13 4 XXXX Xxxxxx Xxxxxxxxxx ABCD 140MoXXXX9:134XXXXABCD
6XX X-52010 Mo-Fr(S) XXXX 19:15 1 XXX Xxxxxxx Xxxxxx Xxx XXXX 100Mo-Fr(S)XXXX19:151XXXXXXX
7XXX X-52464 Di(S) XXXX 11:12 2 XXXX Xxxxxxx Xxx Xxxxxxxx 100      
8XX-X X-2448 So XXXX 22:57 1 XXX Xxxxx Xxx Xxxxxxxx Xxx ABCD 160SoXXXX22:571XXXABCD

Formeln der Tabelle
ZelleFormel
B1=machs($A1;SPALTE(A1))


Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4
' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Function machs(zelle As String, intIndex As Integer)
    Dim regex As Object
    Dim objMatch As Object
    Set regex = CreateObject("Vbscript.Regexp")
    machs = ""
    With regex
        .Pattern = " (Mo|Di||Mi|Do|Fr|Sa|So) ([A-Z]{3,}) ([0-2]?[0-9]:[0-5][0-9]) ([0-9]+) ([A-Z]+).+ ([A-Z]+)(?= \d{3}$)"
        If .test(zelle) Then
            Set objMatch = .Execute(zelle)
            machs = objMatch(0).submatches(intIndex - 1)
            Exit Function
        End If
        
        .Pattern = " (Mo.+?|Di.+?|Mi.+?|Do.+?|Fr.+?|Sa.+?|So.+?) ([A-Z]{2,}) ([0-2]?[0-9]:[0-5][0-9]) ([0-9]+) ([A-Z]+).+ ([A-Z]+)(?= \d{3}$)"
        If .test(zelle) Then
            Set objMatch = .Execute(zelle)
            machs = objMatch(0).submatches(intIndex - 1)
            Exit Function
        End If
        
        .Pattern = "(\b)([A-Z]{3,}) ([0-2]?[0-9]:[0-5][0-9]) ([0-9]+) ([A-Z]+).+ ([A-Z]+)(?= \d{3}$)"
        If .test(zelle) Then
            Set objMatch = .Execute(zelle)
            machs = objMatch(0).submatches(intIndex - 1)
            Exit Function
        End If
        
    End With
End Function


Anzeige
AW: 3 verschiedene Pattern
29.04.2017 11:03:07
hary
Moin Ransi
Nu passt es so weit ich es geprueft habe.
"Geht bestimmt auch eleganter in einem .Pattern
Das bekomm ich aber nicht hin."

Das Pattern kann ich aber nachvollziehen.
Bei Christians muss ich mich Stueck fuer Stueck einlesen. Aber ist ja langes WE.
Danke nochmal und schoe. Feiertag.
gruss hary
AW: nicht ganz aber...
29.04.2017 10:31:45
hary
Moin Ransi
Danke!!
... jetzt hab ich es verstanden. Den Rest bekomm ich hin.



neu
 AB
382EK 54178 Di-Sa(nS) HGGL 4:06 4 HBDD Beddingen Seelze Ost HLER 90 
383EK 54179 Di-Sa(nS) HGGL 2:26 4 HLER Seelze Ost Beddingen VPS HBDD 100Di-Sa(nS)

verwendete Formeln
Zelle Formel Bereich R1C1 für Add In
B382:B383=machs($A382;SPALTE(A382))  =machs(RC1,COLUMN(RC[-1]))

http://excel-inn.de/dateien/vba_beispiele/tabellenanzeige_in_html_addin.zip
http://hajo-excel.de/tools.htm
XHTML-Tabelle zur Darstellung in Foren, einschl. der neuen Funktionen ab Version 2007
Add-In-Version 14.02 einschl 64 Bit

Also muss ich fuer jede Moeglichkeit ein Pattern setzen.
Daher hatte ich es so probiert:
Dim regex As Object
Dim objM As Object
Dim out As Variant, a
Dim i As Long, b As Long
Set regex = CreateObject("VbScript.RegExp")
With regex
For b = 2 To Cells(Rows.Count, 1).End(xlUp).Row
.Pattern = " \d |[A-Z]{2,} | \d+:\d+ "  '--Uhrzeit und HGGL
.Global = True
Set objM = .Execute(Cells(b, 1).Text)
If objM.Count > 0 Then
ReDim out(1 To objM.Count)
For i = 1 To objM.Count
out(i) = objM(i - 1).Value
Cells(b, i + 8) = out(i)
Next
End If
Next
End With

Das er mir mit out(i) nur die Treffer rausgibt.
nochmals Danke
gruss hary
Anzeige
AW: Frage Pattern(RegEx)
29.04.2017 10:23:01
Christian
Hallo Hary,
In Anlehnung an Ransi's Pattern hier mein Beispiel:
Sub TestRegex()
Dim objRgx As Object
Dim objMtch As Object
Dim i As Long, j As Long
Dim strIn As String
Set objRgx = CreateObject("Vbscript.Regexp")
With objRgx
.Global = False
.MultiLine = False
.Pattern = "([Mo|Di|Mi|Do|Fr|Sa|So][^\s]+?)?\s([A-Z]{2,})\s(\d{1,2}:\d{2})\s(\d)\s([A-Z] _
+).+?([A-Z]+)?\s(\d{3})$"
End With
With ThisWorkbook.Sheets("Tabelle2")
For i = 2 To .Cells(.Rows.Count, 1).End(xlUp).Row
strIn = Trim(.Cells(i, 1))
If objRgx.Test(strIn) Then
Set objMtch = objRgx.Execute(strIn)
For j = 0 To objMtch(0).SubMatches.Count - 1
.Cells(i, j + 2) = objMtch(0).SubMatches(j)
Next
End If
Next
End With
Set objRgx = Nothing
End Sub
Gruß
Christian
Anzeige
AW: Frage Pattern(RegEx)
29.04.2017 10:47:58
hary
Moin Christian
Auch dir Danke!
So meinte ich es. Trau mich fast nicht, es zu zeigen. Bsp.: Zeile 149
Das die Vorgabe wirklich Sch..... ist, war mir schon klar.



neu
 ABC
147KT P-41520 Mi HGGL 23:47 1 HBS Ruhland Antwerpen-Noord HLER 100MiHGGL
148DGS P-41524 Di+Do HGGL 16:08 1 HBS Wustermark Einfg Antw-Waaslhvn Zu HLER 100Di+DoHGGL
149DGS P-41711 Di-Sa HGGL 7:48 2 HLER Rotterdam-Pernis Frankfurt (O) HBS 90  
150DGS P-41712 So-Fr HGGL 22:21 1 HBS Frankfurt (O) Rotterdam-Pernis HLER 100So-FrHGGL

http://excel-inn.de/dateien/vba_beispiele/tabellenanzeige_in_html_addin.zip
http://hajo-excel.de/tools.htm
XHTML-Tabelle zur Darstellung in Foren, einschl. der neuen Funktionen ab Version 2007
Add-In-Version 14.02 einschl 64 Bit

Passt aber so schon super. Ein wenig Handarbeit macht nichts.
Nu muss ich nur das Pattern verstehen.
gruss hary
Anzeige
AW: Frage Pattern(RegEx)
29.04.2017 10:59:40
Christian
Hallo Hary,
das Pattern sucht eine 3-Stellige Zahl am Ende. Da in deinem Bsp Zeile 149 eine 2-stellige Zahl am Ende steht, ergibt das keine Treffer.
Also zB. so:
.Pattern = "([Mo|Di|Mi|Do|Fr|Sa|So][^\s]+?)?\s([A-Z]{2,})\s(\d{1,2}:\d{2})\s(\d)\s([A-Z]+).+?([A-Z]+)?\s(\d+)$"
Zur Erklärung:
([Mo|Di|Mi|Do|Fr|Sa|So][^\s]+?): Wochentage und anschließend können noch weitere Zeichen, aber kein Whitespace (hier Blank) folgen.
([Mo|Di|Mi|Do|Fr|Sa|So][^\s]+?)?: das Fragezeichen heißt: der ganze Block kann, muss aber nicht vorkommen.
([Mo|Di|Mi|Do|Fr|Sa|So][^\s]+?)?\s: anschließend folgt ein Whitespace (hier Blank).
usw.
Gruß
Christian
Anzeige
AW: Danke...
29.04.2017 11:13:18
hary
Moin Christian
...fuer's Erklaeren. Hab jetzt erstmal eine Formel von der Obrigkeit bekommen:
=Wenn(Rasen hoch;maehen;Schlaege ins Genick)
gruss hary

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige