2012-05-12 17 views
19

ho questa stringa:Regex per abbinare la prima occorrenza di una stringa

Città - Questo è un testo. Questo è un po 'di più - e continua qui.

Vorrei dividere la stringa in occasione della prima '-' per trovare 'città' (solo una parola del campione, può essere altre parole pure). Inoltre per trovare il resto del testo dopo '-'.

ho costruito questa espressione:

(^[\D\W\S]*)(-)([\D\W\S]*) 

Ma questo trova l'ultima occorrenza di '-' al posto del primo.

Come posso fermarmi alla prima occorrenza?

+4

maggior parte dei linguaggi hanno funzioni per dividere una stringa da un certo carattere e persino consentono di limitare il numero di spaccature. Dovresti usare questa funzione. Se ci fai sapere quale lingua stai usando, potremmo aiutarti di più. –

+0

Dipende dal motore regex. Cosa stai usando? –

+3

Andiamo ragazzi, perché downvotare questo? È una domanda giusta, ci ha messo qualche sforzo di ricerca e ha mostrato ciò che ha provato. Questo è molto più di quello che riceviamo dalla maggior parte dei nuovi arrivati. Quindi, da me, user1391459, benvenuto su StackOverflow, e aspetta lì! (Inoltre è una buona idea scegliere un nome utente migliore :)) –

risposta

38

La soluzione più semplice sarebbe quella di vietare esplicitamente il cruscotto di far parte del primo gruppo:

^([^-]*) - (.*) 

Spiegazione:

^  # Start of string 
([^-]*) # Match any number of characters except dashes 
\ - \ # Match a dash (surrounded by spaces) 
(.*)  # Match anything that follows 

Tuttavia, questo potrebbe non riuscire se la stringa potrebbe contengono un trattino nel primo gruppo (solo non circondato da spazi). Se questo è il caso, allora si può fare uso di quantificatori pigri:

^(.*?) - (.*) 

Spiegazione:

^  # Start of string 
(.*?) # Match any number of characters, as few as possible 
\ - \ # Match a dash (surrounded by spaces) 
(.*)  # Match anything that follows 
+1

Perfetto! Grazie anche per la risposta molto rapida. Perché il testo ha anche le nuove righe e poiché alla fine c'è un numero che dovrebbe essere escluso, questo è ciò che funziona:^(. *?) - ([\ D \ W \ S \ n] *) \ d {10 } – Gijs

+1

Grande, felice di sentirlo. Ma è meglio usare '[\ S \ s] *' invece di '[\ D \ W \ S \ n] *'. –

Problemi correlati