2012-11-11 14 views

risposta

8

La ragione che non corrispondono al secondo elemento è che lo spazio tra 18 e 19 è consumato dalla finale \s+ della prima partita. Si dovrebbe fare un non-consumo di larghezza zero regexp per il vuoto finale, ad esempio utilizzando la sintassi lookahead o un token per limite di larghezza zero:

\s+\d\d(?=\s+) 
+0

Bella spiegazione +1 per il post. –

5

Utilizzare questo invece:

\b\d\d\b 

tua espressione regolare non corrisponde il secondo numero, perché la prima partita ha già "mangiato" tutti gli spazi.

Nel frattempo, \b è un "confine di parola," e ciò che è noto come una larghezza zero (meta) carattere: non "mangia up" qualcosa mentre corrisponde.

+0

impressionante. Sono curioso però, perché non si mangiano gli spazi mentre lo fa? – David

+0

@David - Vedi modifica. È uno dei numerosi costrutti regex progettati per essere a larghezza zero. Un altro notevole sarebbe lookaheads, che avresti potuto usare anche: '\ s + \ d \ d (? = \ S)'. –

+0

attenti che questo catturerebbe anche le due cifre alla fine se c'è qualche – Anirudha

3

Perché prima l'analisi delle uscite su "18" e la stringa rimanente è "19 Testo" che non è una corrispondenza.

Problemi correlati