Regex: finde eine einstellige Zahl

7

Ich muss den Text der einstelligen Zahl finden.

Mein Code:

%Vor%

(Ergebnis: 4 und 5)

Alles funktioniert perfekt, wollte nur fragen, ob es richtig ist, Leerzeichen zu verwenden? Vielleicht gibt es eine andere Möglichkeit, eine einstellige Zahl zu unterscheiden.

Danke

    
lolalola 26.02.2013, 20:59
quelle

4 Antworten

12

Zunächst entspricht [\d]{1} \d .

Was Ihre Frage anbelangt, wäre es besser, eine Assertion mit einer Breite von null wie etwa lookbehind / lookahead oder zu verwenden Wortgrenze ( \b ). Andernfalls werden Sie keine aufeinanderfolgenden einzelnen Ziffern zuordnen, da das führende Leerzeichen der zweiten Ziffer dem nachfolgenden Leerzeichen der ersten Ziffer entspricht (und überlappende Übereinstimmungen werden nicht gefunden).

So würde ich das schreiben:

%Vor%

Dies bedeutet "Passen Sie eine Ziffer nur an, wenn davor kein Leerzeichen vorhanden ist und hinter dem Zeichen kein Leerzeichen steht."

Ich habe das doppelte Negativ wie (?!\S) anstelle von (?=\s) verwendet, so dass Sie auch einzelne Ziffern am Anfang oder Ende der Zeichenfolge finden.

Ich bevorzuge das über \b\d\b für Ihr Beispiel, weil es so aussieht, als wollten Sie nur übereinstimmen, wenn die Ziffer von Leerzeichen umgeben ist, und \b\d\b würde die 4 und die 5 in einer Zeichenfolge wie übereinstimmen 192.168.4.5

Um Interpunktion am Ende zu ermöglichen, könnten Sie Folgendes verwenden:

%Vor%

Fügen Sie zusätzliche Interpunktionszeichen hinzu, die nach der Ziffer für die Zeichenklasse zulässig sind (innerhalb der eckigen Klammern, aber vergewissern Sie sich, dass sie hinter dem ^ steht).

    
Andrew Clark 26.02.2013, 21:03
quelle
10

Verwenden Sie Wortgrenzen . Beachten Sie, dass der Bereichsquantifizierer {1} (ein einzelnes \d nur einer Ziffer entspricht) und die Zeichenklasse [] redundant ist, da sie nur aus einem Zeichen besteht.

%Vor%     
kjetilh 26.02.2013 21:01
quelle
3

Suche nach Wortgrenzen:

%Vor%

Wie von den anderen erklärt, wird dies einzelne Ziffern extrahieren, was bedeutet, dass einige Sonderzeichen nicht wie "." in einer IP-Adresse. Siehe dazu F.J und Mike Brants Antwort (en).

    
user626607 26.02.2013 21:01
quelle
0

Es hängt wirklich davon ab, wo die Zahlen erscheinen können und ob es Ihnen interessiert, ob sie neben anderen Zeichen stehen (wie . am Ende eines Satzes). Zumindest würde ich Wortgrenzen verwenden, so dass Sie Zahlen am Anfang und Ende der Eingabezeichenfolge erhalten können:

%Vor%

Aber Sie könnten die Interpunktion am Ende wie folgt betrachten:

%Vor%     
Mike Brant 26.02.2013 21:05
quelle

Tags und Links