Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1124to1128
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

Vbscript.Regexp Text Filtern Kommazahlen

Vbscript.Regexp Text Filtern Kommazahlen
Tino
Hallo,
wie muss der Reguläre Ausdruck lauten um den Text von den Zahlen zu trennen.
Beispiel Text: "Beispiel 15a11,5b"
Zu beachten gilt, dass die Zahl 11,5 durch das Komma auch eine Text enthält
aber dieses Komma zur Zahl gehört.
Ergebnis sollte sein.
Beispiel    a     b
.Pattern = "\D{1,}" -funktioniert nicht wegen dem Komma
.Pattern = "\D{2,}" -funktioniert auch nicht wegen den einzelnen Buchstaben zwischen den Zahlen.
Hier ein Code zum Testen
Sub BeispielCode()
Dim Regex As Object, objMatch As Object
Dim strText$
strText = "Beispiel 15a11,5b"
Set Regex = CreateObject("Vbscript.Regexp")
With Regex
.MultiLine = True
.Pattern = "\D{1,}"
.Global = True
End With
For Each objMatch In Regex.Execute(strText)
Debug.Print objMatch
Next objMatch
End Sub

Danke
Gruß Tino
.Pattern = "[0-9\,]+"
21.12.2009 21:47:45
ransi
HAllo
.Pattern = "[0-9\,]+"
Findet allerdings auch sowas 11,,,,,,3
:-(
Müsste man die subMatches evtl. nochmal mit isNumeric() prüfen...
ransi
nicht die Zahlen,...
21.12.2009 21:50:15
Tino
Hallo,
ich wollten den Text.
Gruß Tino
AW: nicht die Zahlen,...
21.12.2009 21:52:36
ransi
HAllo Tino
ich wollten den Text.

Sorry.
.Pattern = "[a-zA-ZöäüÄÖÜß]+"
ransi
AW: nicht die Zahlen,...
21.12.2009 21:59:12
ransi
HAllo Tino
Oder wenn du alles ausser Zahlen und Komma zulassen willst:
.Pattern = "[^\d\,]+" 'Alles außer Zahlen und Komma

ransi
Anzeige
ist schon mal ein Anfang danke, aber ...
21.12.2009 22:10:14
Tino
Hallo,
so richtig ist es noch nicht was ich eigentlich suche.
Der Text könnte nun auch ein Komma enthalten, dann gehört dieses Komma wieder zum Text.
Kann man den Ausdruck nicht irgendwie so hinbiegen,
dass alles darauf passt außer Zahlen und Kommas die zwischen zwei Zahlen stehen.
Hier ein neues Textbeispiel:
"Ich möchte, diesen Text von der Zahl a15,2b trennen.1a"
Gruß Tino
AW: ist schon mal ein Anfang danke, aber ...
21.12.2009 22:16:50
Nepumuk
Hi,
so schnappst du dir Zahlen und Zahlen mit Komma: \d+,\d+|\d+
Der (oder war's die) Pipe also der senkrechte Strich entspricht einem OR.
Gruß
Nepumuk
ich brauche aber den Text...
21.12.2009 22:32:02
Tino
Hallo,
man könnte zwar die Zahlen danach aus dem Text mit Replace rauslöschen,
aber was ist wenn Zahlen wie 1,1 und 21,111 oder 111 vorkommen,
dann lösche ich mir wieder die 1,1 aus der 21,11.
Demnach müsste ich die Zahlen wieder von lang nach kurz sortieren und danach löschen,
dies wollte ich umgehen.
Gruß Tino
Anzeige
war wohl wie von Sepp gemeint, danke. oT
21.12.2009 22:49:09
Sepp
AW: Vbscript.Regexp Text Filtern Kommazahlen
21.12.2009 22:10:10
Nepumuk
Hallo Tino,
lade dir hier: C:\Program Files\The Regex Coach\doc\index.html den Regex Coach herunter. Das ist ein kleines Tool mit dem du so etwas durchspielen kannst und auch sofort siehst, was gefunden wird und was nicht.
Userbild
Gruß
Nepumuk
danke für den Link,... (Frage offen)
21.12.2009 22:22:48
Tino
Hallo,
werde mal schauen ob da was raus kommt dabei.
Die Frage lass ich mal offen, vielleicht hat einer die richtige Lösung dazu.
Ziel ist es aus diesem Text
"Ich möchte, diesen Text von der Zahl a15,2b trennen."
Den Text zu filtern.
Zu beachten ist,
dass dieses Komma bei der Zahl zur Zahl gehört und das Komma nach möchte zum Text.
Gruß Tino
Anzeige
AW: danke für den Link,... (Frage offen)
21.12.2009 22:41:12
Josef
Hallo Tino,
dann halt so.
Sub BeispielCode()
  Dim Regex As Object
  Dim strText$
  
  strText = "Ich möchte, diesen Text von der Zahl a15,2b trennen."
  
  Set Regex = CreateObject("Vbscript.Regexp")
  
  With Regex
    .MultiLine = True
    .Pattern = "\d+,\d+|\d+"
    .Global = True
  End With
  
  strText = Regex.Replace(strText, "")
  
  Debug.Print strText
  
  Set Regex = Nothing
End Sub

Gruß Sepp

Anzeige
danke das soll mir genügen, ...
21.12.2009 22:46:49
Tino
Hallo,
wollte zwar die Textteile getrennt haben, aber das bekomme ich jetzt hin.
Danke
Gruß Tino
dank eurer Hilfe habe ich es jetzt so gemacht...
21.12.2009 23:08:57
Tino
Hallo,
Sub BeispielCode()
Dim Regex As Object, objMatch As Object
Dim strText$
strText = "Ich möchte, diesen Text von den Zahl a15,2b trennen.1a"
Set Regex = CreateObject("Vbscript.Regexp")
With Regex
.MultiLine = True
.Pattern = "\d+,?\d+"
.Global = True
strText = .Replace(strText, "0")
.Pattern = "\D+"
For Each objMatch In .Execute(strText)
Debug.Print objMatch
Next objMatch
End With
End Sub
Gruß Tino
AW: dank eurer Hilfe habe ich es jetzt so gemacht...
22.12.2009 13:05:32
bst
Hi Tino,
das hatte ich schon gesehen. Wenn Du den Text als Ganzes haben willst reicht bei meiner Variante nun ein einziger Replace.
cu, Bernd
Anzeige
nicht im ganzen...
22.12.2009 13:40:38
Tino
Hallo,
ich wollte aber den Text eben nicht im ganzen sondern die Teilestücke,
daher hatte ich mich mit Execute verrannt und nicht daran gedacht den Spieß einfach rumzudrehen.
Eine weitere Möglichkeit wäre
Sub BeispielCode()
Dim Regex As Object, objMatch As Object
Dim strText$
strText = "Ich möchte, diesen Text von den Zahl a15,2b trennen.1a"
Set Regex = CreateObject("Vbscript.Regexp")
With Regex
.MultiLine = True
.Pattern = "\d+,?\d+|\d+|\D+"
'oder
'      .Pattern = "\d{1,},?\d{1,}|\d{1,}|\D{1,}"
.Global = True
For Each objMatch In .Execute(strText)
If Not IsNumeric(objMatch) Then
Debug.Print "Text:", objMatch
Else
'*1 damit aus dem Text eventuell eine Zahl wird
Debug.Print "Zahl:", objMatch * 1
End If
Next objMatch
End With
End Sub
jetzt kann man sich raussuchen was man haben möchte.
Gruß Tino
Anzeige
AW: nicht im ganzen...
22.12.2009 14:06:03
bst
Hi Tino,
Du hattest den 2. Teil von mir auch gesehen, ja?
cu, Bernd
--
Option Explicit

Sub x()
    Dim s As String, objRe As Object, objMatch As Object
    
    s = "Ich möchte, diesen Text von der Zahl a15,2b trennen.1a"
    Set objRe = CreateObject("vbscript.regexp")
    objRe.Pattern = "(?:[^\d,]|,(?!\d))+"
    objRe.Global = True
    objRe.MultiLine = True
    
    For Each objMatch In objRe.Execute(s)
        Debug.Print objMatch
    Next
    
    Set objMatch = Nothing
    Set objRe = Nothing
End Sub


Anzeige
man sieht es gibt mehrere Lösungswege. oT.
22.12.2009 14:37:51
Tino
AW: Vbscript.Regexp Text Filtern Kommazahlen
22.12.2009 12:22:07
bst
Auch Hallo,
.Pattern = "\d+,?\d+"
benötigt mindestens 2 Ziffern!, nimm besser:
.Pattern = "\d+(?:,\d+)?"
Anders herum sollte so etwas gehen:
.Pattern = "(?:[^\d,]|,(?!\d))+"
d.h. Alles außer Ziffern und Komma - oder - ein Komma gefolgt von einer Nicht-Ziffer.
cu, Bernd
danke stimmt aber...
22.12.2009 12:55:32
Tino
Hallo,
in diesem Fall ist es nicht nötig eine einzelne Ziffer zu finden, weil ich sowieso nur den Text herrausziehe.
Dennoch danke.
Gruß Tino

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige