Ich habe mehrere Saiten in der groben Form:
[some text] [some number] [some more text]
Ich möchte den Text in [einer Zahl] mit den Java Regex-Klassen extrahieren.
Ich weiß ungefähr, welchen regulären Ausdruck ich verwenden möchte (obwohl alle Vorschläge willkommen sind). Was mich wirklich interessiert, sind die Java-Aufrufe, die Regex-Zeichenfolge zu verwenden und sie für die Quelldaten zu verwenden, um den Wert von [eine Zahl] zu erzeugen.
EDIT: Ich sollte hinzufügen, dass ich nur an einer einzelnen [einer Nummer] interessiert bin (im Grunde die erste Instanz). Die Quellzeichenfolgen sind kurz und ich werde nicht nach mehreren Vorkommen von [einer bestimmten Anzahl] suchen.
Antworten:
Vollständiges Beispiel:
Da Sie nach der ersten Nummer suchen, können Sie einen solchen regulären Ausdruck verwenden:
und
m.group(1)
wird Ihnen die erste Nummer zurückgeben. Beachten Sie, dass vorzeichenbehaftete Zahlen ein Minuszeichen enthalten können:quelle
Ausgabe:
quelle
Allain hat im Grunde den Java-Code, also können Sie diesen verwenden. Sein Ausdruck stimmt jedoch nur überein, wenn Ihren Zahlen nur ein Strom von Wortzeichen vorangestellt ist.
sollte in der Lage sein, die erste Ziffernfolge zu finden. Sie müssen nicht angeben, was davor steht, wenn Sie sicher sind, dass es sich um die erste Ziffernfolge handelt. Ebenso kann man nicht angeben, was danach ist, es sei denn, Sie möchten das. Wenn Sie nur die Nummer möchten und sicher sind, dass es sich um die erste Zeichenfolge mit einer oder mehreren Ziffern handelt, ist dies alles, was Sie benötigen.
Wenn Sie erwarten, dass es durch Leerzeichen versetzt wird, wird die Angabe noch deutlicher
könnte besser sein.
Wenn Sie alle drei Teile benötigen, reicht dies aus:
EDIT Die Ausdrücke von Allain und Jack lassen vermuten , dass Sie eine gewisse Teilmenge von Nicht-Ziffern zu erfassen , um spezifizieren müssen Ziffern . Wenn Sie der Regex-Engine mitteilen, nach der Sie suchen
\d
, wird alles vor den Ziffern ignoriert. Wenn J oder A Ausdruck paßt Ihr Muster, dann das ganze Spiel ist gleich die Eingabezeichenfolge . Und es gibt keinen Grund, dies anzugeben. Es verlangsamt wahrscheinlich ein sauberes Match, wenn es nicht völlig ignoriert wird.quelle
Zusätzlich zu Pattern verfügt die Java String- Klasse über mehrere Methoden, die mit regulären Ausdrücken arbeiten können. In Ihrem Fall lautet der Code:
wo
\\D
ist ein nichtstelliges Zeichen.quelle
In Java 1.4 und höher:
quelle
Diese Funktion sammelt alle übereinstimmenden Sequenzen aus der Zeichenfolge. In diesem Beispiel werden alle E-Mail-Adressen aus der Zeichenfolge übernommen.
Denn
message = "[email protected], <[email protected]>>>> [email protected]"
es wird eine Liste von 3 Elementen erstellt.quelle
Versuchen Sie so etwas zu tun:
quelle
.+
gierig Zeichen verbraucht,\d+
erfasst nur das"3"
von"123"
. Außerdem müssen Sie in String-Literalen den Backslash umgehen (Ihr Beispiel wird nicht kompiliert).Einfache Lösung
Lösung in einer Util-Klasse
quelle
Schauen Sie, Sie können es mit StringTokenizer tun
Da wir diese numerischen Daten in drei verschiedene Variablen umwandeln, können wir diese Daten an einer beliebigen Stelle im Code verwenden (zur weiteren Verwendung).
quelle
Wie
[^\\d]*([0-9]+[\\s]*[.,]{0,1}[\\s]*[0-9]*).*
wäre es, wenn ich denke, es würde sich um Zahlen mit Bruchteilen kümmern. Ich habe Leerzeichen und,
als mögliches Trennzeichen eingefügt. Ich versuche, die Zahlen aus einer Zeichenfolge einschließlich Floats herauszuholen und zu berücksichtigen, dass der Benutzer möglicherweise einen Fehler macht und Leerzeichen einfügt, während er die Zahl eingibt.quelle
Manchmal können Sie die einfache .split-Methode ("REGEXP") verwenden, die in java.lang.String verfügbar ist. Beispielsweise:
quelle
quelle
Wenn Sie aus einer Datei lesen, kann dies hilfreich sein
quelle