2017-01-05 5 views
0

Ich möchte n aufeinanderfolgende Zahlen in einem Text finden. Ich kann nicht nur Leerzeichen zulassen, da dies die Zählregel (n Ziffern!) Durchbrechen würde. Was wäre der einfachste Weg, dies zu tun?Regex nicht in Betracht ziehen Leerzeichen

Ich meine ich will nicht \d\s*\d\s*\d\s* ... etc Ich fühle, dass es einen besseren Weg gibt.

edit: [\d\s]{n} funktioniert nicht, weil ich n Ziffern nicht n Zeichen will.

+0

Würde dies für Sie arbeiten? '[0-9] +' –

+0

Was ist die 'n' Regel? '[\ d \ h] +' sollte funktionieren (abhängig davon, wo die Regex verwendet wird, und wenn Sie auch Tabulatoren zulassen wollen), obwohl das keine Nummer erfordert .. wahrscheinlich ist ein sicherer Ansatz '\ d [\ d \ h] * 'das ist eine Zahl, dann beliebig viele Leerzeichen/Tabs und Zahlen. – chris85

+0

@DaanMeijer klingt, als müsste das Muster mit 'n' Ziffern übereinstimmen (mit oder ohne Leerzeichen). Ich nehme an, das ist, was die "n Regel" ist, sowieso ... – jmar777

Antwort

3

Diese Arbeit sollte:

/^\s*(?:\d\s*){n}$/

Erläuterung:

  • /^\s*…$ entspricht einer Zeichenfolge, die optional mit Leerzeichen beginnt.
  • (?:…){n} erstellt eine nicht erfassende Gruppe, in der alles in der Gruppe n mal abgestimmt wird.
  • \d\s* wird eine einzelne Ziffer mit optionalen Leerzeichen nach ihm übereinstimmen.
+1

Vermeiden Sie die '\ s *' sowohl beim Betteln und Ende der sich wiederholenden Gruppen, da es exponentielle Rückverfolgung im Falle einer falschen Eingabe verursachen könnte. Folgendes ist eine bessere Alternative: '/^\ s * (?: \ D \ s *) {n} $/ – jwatkins

+0

@jwatkins toller Fang! Meine Antwort wurde aktualisiert. – jmar777

1

Dies erfordert genau n Ziffern:

^\D*(\d\D*){n}\D*$ 

oder wenn nur Leerzeichen als Ziffern andere sind erlaubt:

^ *(\d){n} *$ 
Verwandte Themen