Microsoft Excel

Herbers Excel/VBA-Archiv

Vbscript.Regexp Text Filtern Kommazahlen | Herbers Excel-Forum


Betrifft: Vbscript.Regexp Text Filtern Kommazahlen von: Tino
Geschrieben am: 21.12.2009 21:23:02

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

  

Betrifft: .Pattern = "[0-9\,]+" von: ransi
Geschrieben am: 21.12.2009 21:47:45

HAllo

.Pattern = "[0-9\,]+"

Findet allerdings auch sowas 11,,,,,,3
:-(
Müsste man die subMatches evtl. nochmal mit isNumeric() prüfen...

ransi


  

Betrifft: nicht die Zahlen,... von: Tino
Geschrieben am: 21.12.2009 21:50:15

Hallo,
ich wollten den Text.

Gruß Tino


  

Betrifft: AW: nicht die Zahlen,... von: ransi
Geschrieben am: 21.12.2009 21:52:36

HAllo Tino

ich wollten den Text.

Sorry.
.Pattern = "[a-zA-ZöäüÄÖÜß]+"

ransi


  

Betrifft: AW: nicht die Zahlen,... von: ransi
Geschrieben am: 21.12.2009 21:59:12

HAllo Tino

Oder wenn du alles ausser Zahlen und Komma zulassen willst:

.Pattern = "[^\d\,]+" 'Alles außer Zahlen und Komma



ransi


  

Betrifft: ist schon mal ein Anfang danke, aber ... von: Tino
Geschrieben am: 21.12.2009 22:10:14

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


  

Betrifft: AW: ist schon mal ein Anfang danke, aber ... von: Nepumuk
Geschrieben am: 21.12.2009 22:16:50

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


  

Betrifft: ich brauche aber den Text... von: Tino
Geschrieben am: 21.12.2009 22:32:02

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


  

Betrifft: war wohl wie von Sepp gemeint, danke. oT von: Tino
Geschrieben am: 21.12.2009 22:49:09




  

Betrifft: AW: Vbscript.Regexp Text Filtern Kommazahlen von: Nepumuk
Geschrieben am: 21.12.2009 22:10:10

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.



Gruß
Nepumuk


  

Betrifft: Hier der richtige Link von: Nepumuk
Geschrieben am: 21.12.2009 22:12:02

http://weitz.de/regex-coach/

LG
Nepumuk


  

Betrifft: danke für den Link,... (Frage offen) von: Tino
Geschrieben am: 21.12.2009 22:22:48

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


  

Betrifft: AW: danke für den Link,... (Frage offen) von: Josef Ehrensberger
Geschrieben am: 21.12.2009 22:41:12

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



  

Betrifft: danke das soll mir genügen, ... von: Tino
Geschrieben am: 21.12.2009 22:46:49

Hallo,
wollte zwar die Textteile getrennt haben, aber das bekomme ich jetzt hin.

Danke


Gruß Tino


  

Betrifft: dank eurer Hilfe habe ich es jetzt so gemacht... von: Tino
Geschrieben am: 21.12.2009 23:08:57

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


  

Betrifft: AW: dank eurer Hilfe habe ich es jetzt so gemacht... von: bst
Geschrieben am: 22.12.2009 13:05:32

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


  

Betrifft: nicht im ganzen... von: Tino
Geschrieben am: 22.12.2009 13:40:38

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


  

Betrifft: AW: nicht im ganzen... von: bst
Geschrieben am: 22.12.2009 14:06:03

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




  

Betrifft: man sieht es gibt mehrere Lösungswege. oT. von: Tino
Geschrieben am: 22.12.2009 14:37:51




  

Betrifft: AW: Vbscript.Regexp Text Filtern Kommazahlen von: bst
Geschrieben am: 22.12.2009 12:22:07

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


  

Betrifft: danke stimmt aber... von: Tino
Geschrieben am: 22.12.2009 12:55:32

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


Beiträge aus den Excel-Beispielen zum Thema "Vbscript.Regexp Text Filtern Kommazahlen"