/ / Java regex per una serie di numeri separati da un separatore specifico: java, regex

Espressione regolare di Java per una serie di numeri separati con un separatore specifico: java, regex

Ho bisogno di un'espressione regolare per descrivere una stringa che contiene un minimo di tre (3) e un massimo di sei (6) di numeri a 2 cifre e numeri a 3 cifre in qualsiasi ordine. I numeri dovrebbero essere separati da # ma potrebbe anche contenere spazi. Esempi di questa stringa sono:

34 #563# 23

123#678#12#44# 45

risposte:

4 per risposta № 1

Cosa ne pensi di questo:

^s*d{2,3}s*(?:#s*d{2,3}s*){2,5}$

Spiegazione:

^         # Start of string
s*       # optional whitespace
d{2,3}   # match a number (2 to 3 digits)
s*       # optional whitespace
(?:       # Match...
#       # - a hashmark
s*      # - optional whitespace
d{2,3}  # - a number
s*      # - optional whitespace
){2,5}    # 2 to 5 times
$         # End of string

2 per risposta № 2
/d{2,3}(?:s*#s*d{2,3}){2,5}/

Spiegazione:

d

Cattura una cifra.

{2,3}

Due o tre volte, quindi:

(?: ...)

raggruppa quanto segue, ma non catturare ciò che il gruppo stesso cattura.

s*

Cattura zero o più spazi ...

#

... un cancelletto.

s*

... zero o più spazi ...

d{2,3}

e un altro numero di due o tre cifre.

{2,5}

Fai quel gruppo da due a cinque volte, per un totale di tre o sei numeri.

Per forzare la corrispondenza con una stringa completa, è possibile aggiungere ^s* all'inizio e s*$ alla fine, come ^ corrisponde all'inizio di una stringa, e $ Alla fine, ma in realtà mi consiglia di utilizzare solo il carato e il simbolo del dollaro e l'utilizzo di a trim funzione invece, perché s* (o davvero, e *) è super inefficiente. Con una o due corde, non è un grosso problema, ma se si dice: estraendo numeri da una rubrica telefonica, si avrà un brutto momento.