2Danke
ERLEDIGT
JA
JA
ANTWORTEN
10
10
ZUGRIFFE
889
889
EMPFEHLEN
-
18.11.11 10:55 #1
- Registriert seit
- Feb 2007
- Beiträge
- 75
Hallo!
Ich will alle Zahlen in einem Text finden.
Beispiel:
"test1 tes2t 3test 100 200 test"
Sollte 100 und 200 ergeben
Mein Regex: "^\d+\s|\s\d+$|\s\d+\s|^\d+$"
liefert aber nur 100
Was kann man da also unternehmen?
PS: wie die Zahlen genau aussehen, weiss ich auch nicht im voraus. Es könnte auch 1000 stehen.
Gruss
BBBB
-
18.11.11 11:56 #2
- Registriert seit
- Feb 2007
- Beiträge
- 75
erledigt
\d{1,}
-
18.11.11 13:28 #3
- Registriert seit
- Feb 2007
- Beiträge
- 75
sorry, das wars ja auch nicht, da kommen 1,2,3 auch mit.... Irgend eine Idee um Alleinstehende Nummern zu finden?
-
18.11.11 13:50 #4
Moin,
schau mal hier in die API
http://download.oracle.com/javase/6/...x/Pattern.html
Gruß
KlausEs ist noch kein Meister vom Himmel gefallen - sonst hätte man schon längst seine Leiche gefunden !!
Falls ich helfen konnte, wäre eine Bewertung oder ein Danke nett ;-)
-------------------------------------------------------------------------------------------------
Ich beantworte keine Fragen per PN !!
Stellt Eure Fragen im Forum - dann haben alle etwas davon !!
-
18.11.11 14:05 #5
Hi,
also ich habe da selber erst einmal ein wenig rumtüfteln müssen. Bin nun aber auf eine Lösung gekommen.
Code java:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
public List<Integer> extractNumbers(String string) { List<Integer> foundValues = new ArrayList<Integer>(); int indexOf = 0; while(indexOf != -1) { String firstMatch = getFirstMatch(string, " (\\d+) ", indexOf); if(firstMatch != null) { // Damit der gleiche String nicht nochmal gefunden wird +1 indexOf = string.indexOf(firstMatch)+1; foundValues.add(Integer.valueOf(Integer.parseInt(firstMatch.replaceAll(" ", "")))); } else { indexOf = -1; } } return foundValues; } private String getFirstMatch(String string, String regex, int start) { Pattern pattern = Pattern.compile(regex); Matcher m = pattern.matcher(string); while(m.find(start)) { return m.group(1); } return null; }
Gruß
FabioGeändert von Fabio Hellmann (18.11.11 um 14:14 Uhr)
Bitte die Code-Tags verwenden. Bei Java-Code: [java]...[/java]
Tutorials:
Automatisches erzeugen eines Inhaltsverzeichnisses (Javascript)
JAnimationPanel - Animationen für Swing/AWT
SWTRatingBar (Bewertungs-Composite) selbst programmieren
____________________________________________________________________________
Über eine Bewertung (Stern links unter dem Beitrag) oder ein Danke freue ich mich sehr.
-
18.11.11 14:24 #6
- Registriert seit
- Feb 2007
- Beiträge
- 75
Oh sorry, ich habe erst jetzt gesehen, dass ich da im Java Forum gelandet bin... mein Fehler.
Das ganze wäre eigentlich in VBA. Aber deine Antwort sagt eigentlich schon das wesentliche: nur regex alleine kann das nicht. Also werde ich mal vesuchen deine Idee nach VBA umzuschreiben. Danke dir!
@Admin: move topic please
-
18.11.11 14:38 #7
Ok. Du kannst deine Lösung in VBA dann auch noch posten, damit wir das komplett haben.
Wenn das Problem dann gelöst ist, kannst du das Thema auch als erledigt markieren.
Bitte die Code-Tags verwenden. Bei Java-Code: [java]...[/java]
Tutorials:
Automatisches erzeugen eines Inhaltsverzeichnisses (Javascript)
JAnimationPanel - Animationen für Swing/AWT
SWTRatingBar (Bewertungs-Composite) selbst programmieren
____________________________________________________________________________
Über eine Bewertung (Stern links unter dem Beitrag) oder ein Danke freue ich mich sehr.
-
18.11.11 16:53 #8
Muss es unbedingt Regex sein? Wenn nein, anderer Vorschlag:
Code :1 2 3 4 5 6 7 8
SearchString = "test1 tes2t 3test 100 200 test" SearchTokens = Split(SearchString) For Each SearchToken In SearchTokens If IsNumeric(SearchToken) Then MsgBox SearchToken End If Next SearchToken
In diesem Beispiel werden auch Zahlen mit Zahlentrennzeichen gefunden, entweder ist das in deinem Fall egal oder man müsste noch zusätzlich darauf reagieren. Andere Frage, ist dein Text ein richtiger Text, d.h. kommen da auch Satzzeichen vor?Jeder Fehler, aus dem wir lernen, ist ein Erfolg...
...Aber mach' nicht den Fehler, nicht aus deinen Fehlern zu lernen.
-
21.11.11 09:27 #9
- Registriert seit
- Feb 2007
- Beiträge
- 75
Nein, natürlich muss es nicht unbedingt regex sein. Das war einfach das, was mir als erstes in den Sinn kam....
Und nein, es kommen nur ganze Zahlen vor und Satzzeichen gibt's auch nicht. Von da her reicht das vollkommen! Danke! Manchmal macht man sich wohl das Leben schwerer als es geigentlich wäre...
-
Reguläre Ausdrücke gehen in VBA schon. Sind aber sehr umständlich zum handhaben.
Ein weiteres Problem ist, dass VBA RegExp nicht mit überlappenden Treffer arbeiten kann. Also muss man auch da mit einer Schleife arbeiten.
Ich habe dir mal ein Beispiel gemacht, wie du die Zahlen findest. Auch wenn sie am String-Anfang oder am String-Ende stehen. Auch Satzzeichen stellen dabei kein Problem dar.
Code vb:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
Dim reg As New RegExp Dim matches As MatchCollection Dim value, i As Variant Dim str As String str = "568 test1 tes2t 3test.100 200 test 12" ' 3teiliger Pattern: ' Ein Nicht-Wort-Zeichen oder String-Anfang: (?:^|[\W]) ' Eine beliebege Anzahl Nummern: ([\d]+) ' Ein Nicht-Wort-Zeichen oder String-Ende: (?:[\W]|$) reg.Pattern = "(?:^|[\W])([\d]+)(?:[\W]|$)" ' Definieren dass nur ein Treffer genommen wird reg.Global = False ' Schleife die den String solange parst bis es keine Treffer mehr gibt Do While reg.test(str) ' String durchsuchen Set matches = reg.execute(str) ' Treffer extrahieren Debug.Print matches.item(0).SubMatches(0) ' Die getroffene Stelle durch ein Leerzeichen ersetzen str = reg.Replace(str, " ") Loop Set matches = Nothing Set reg = Nothing
Ausgabe
Code :1 2 3 4
568 100 200 12
---------------------------------------------------------------------------------------------------
item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
item: Tutorial: [PHP][MySQL] Debug Queries
item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben
-
21.11.11 11:37 #11
- Registriert seit
- Jun 2005
- Beiträge
- 8.168
Hi.Hierbei ja eigentlich nicht, da sich die Treffer nicht überschneiden.
Also z.B. einfach:
Ergibt:Code :1 2 3 4 5 6
reg.pattern = "\b\d+\b" reg.Global = True For Each Match in reg.Execute("400 test1 tes2t 3test 100 200 test 300") Debug.Print Match Next
GrußCode :1 2 3 4
400 100 200 300
If at first you don't succeed, try again. Then quit. No use being a damn fool about it.
Ähnliche Themen
-
RegEx erlaubte Eingabe: Zahlen 2 bis 30
Von RalU im Forum Java GrundlagenAntworten: 3Letzter Beitrag: 12.03.10, 18:00 -
JavaScript RegEx für Zahlen
Von SYS83 im Forum Javascript & AjaxAntworten: 2Letzter Beitrag: 31.08.09, 10:57 -
Regex Problem: Zahlen aus (33:22:11) extrahieren
Von Nord-Süd-Richtung im Forum PHPAntworten: 3Letzter Beitrag: 09.01.09, 07:06 -
(RegEx) Pwd-Länge u. mind.2 Zahlen o. Buchstaben
Von Watusimann im Forum PHPAntworten: 5Letzter Beitrag: 13.07.07, 13:28 -
Mit regex Zahlen aus einem JTextfield filtern
Von Hayes im Forum JavaAntworten: 2Letzter Beitrag: 22.09.04, 15:55





Zitieren


Login





