2009-08-06 13 views

risposta

114

Se si desidera abbinare solo le righe che iniziano con l'uso di arresto

^stop 

Se si desidera confrontare le righe che iniziano con la parola STOP seguito da uno spazio

^stop\s 

O, se si desidera linee di corrispondenza che iniziano con la parola stop ma seguite da uno spazio o qualsiasi altro carattere non word che puoi usare (il tuo gusto regex permettendo)

^stop\W 

D'altra parte, quanto segue corrisponde a una parola all'inizio di una stringa sulla maggior parte dei sapori regex (in questi sapori \ w corrisponde l'opposto di \ W)

^\w 

Se il sapore non ha la \ w di scelta rapida, è possibile utilizzare

^[a-zA-Z0-9]+ 

essere diffidenti che questo secondo idioma corrisponderà solo lettere e numeri, nessun simbolo di sorta.

Controlla la tua regex manuale sapore di sapere che cosa le scorciatoie sono ammesse e che cosa esattamente essi corrispondono (e come si trattano con Unicode.)

+14

+1 per generalizzare la risposta. Mi piacerebbe vedere di più su Stack Overflow. Rende una risorsa di apprendimento migliore secondo me. – Jim

6
/stop([a-zA-Z])+/ 

Restituirà tutte le parole di arresto (stop, fermo, arresto, ecc)

Tuttavia, se si desidera solo per corrispondenza "stop" alla partenza di una stringa

farà: D

+2

Corrisponde a "non smettere di andare" –

+0

Ho riletto la domanda e cambiato la mia risposta: D – Mez

+1

Questo non corrisponderà a stop123 o stop ,. –

46

Prova questo:

/^stop.*$/ 

Spiegazione:

  • / charachters delimitano l'espressione regolare (cioè non fanno parte del Regex per sé)
  • ^ significa partita all'inizio della linea
  • . seguito da * significa corrispondere a qualsiasi carattere (.), Qualsiasi numero di volte (*)
  • $ significa la fine della linea

Se si vuole obbligare che smettere di essere seguito da uno spazio bianco, è possibile modificare l'espressione regolare in questo modo:

/^stop\s+.*$/ 
  • \ s: qualsiasi carattere di spazio
  • + f opo la \ s significa che ci deve essere almeno un carattere di spazio bianco in seguito, dopo la parola fermata

Nota: Anche tenere a mente che il RegEx sopra richiede che la parola di arresto essere seguito da uno spazio! Quindi non sarebbe partita una riga che contiene solo: fermata

+2

. * $ È ridondante. – Mez

+0

Non tutte le lingue usano forwardslashes per delimitare le regex. – JAB

+1

@Cat Megex: che è esattamente il motivo per cui ho aggiunto la spiegazione. Se la tua lingua usa qualcos'altro per delimitare la regex, sostituisci il/con il carattere corretto –

6

Se si desidera far corrispondere qualsiasi cosa che inizia con "stop", tra cui "smettere di andare", "stop" e "fermare" l'uso:

^stop 

Se si desidera far corrispondere la parola STOP e quindi qualsiasi cosa come in "smettere di andare", "fermare questo", ma non "fermato" e non "fermare" l'uso:

^stop\W 
0

mi piacerebbe sconsigliare una semplice espressione regolare approa ch a questo problema. Ci sono troppe parole che sono sottostringhe di altre parole non correlate, e probabilmente ti farai impazzire cercando di sovradimensionare le soluzioni più semplici già fornite.

Avrai almeno un ingenuo algoritmo di derivazione (prova lo stemmer Porter, c'è il codice libero disponibile nella maggior parte delle lingue) per elaborare prima il testo. Mantieni questo testo elaborato e il testo preelaborato in due distinti array separati. Assicurati che ogni carattere non alfabetico abbia anche il proprio indice in questo array. Qualunque sia la lista di parole che stai filtrando, falla anche loro.

Il prossimo passo sarebbe quello di trovare gli indici di array che corrispondono al tuo elenco di parole "stop" con stemmed. Rimuovere quelli dall'array non elaborato e quindi ricongiungersi agli spazi.

Questo è solo leggermente più complicato, ma sarà un approccio molto più affidabile. Se hai qualche dubbio sul valore di un approccio più orientato alla PNL, potresti voler fare qualche ricerca su clbuttic mistakes.

11

Se si desidera far corrispondere nulla dopo una parola fermare un non solo all'inizio della riga che si può usare: \bstop.*\b - word followed by line

Word till the end of string

Oppure, se si desidera far corrispondere la parola nella stringa utilizzare \bstop[a-zA-Z]* - only the words starting with stop

Only the words starting with stop

o l'inizio di linee con arresto ^stop[a-zA-Z]* solo la parola - first word only
L'intera linea ^stop.*-first line of the string only

E se si desidera far corrispondere ogni stringa che inizia con arresto tra cui a capo usare: /^stop.*/s-multiline string starting with stop

0

Se si desidera la parola per iniziare con "stop ", puoi usare il seguente schema. "^ stop. *"

Questo corrisponderà alle parole che iniziano con stop seguito da qualsiasi cosa.

+1

Potrebbe non usi semplicemente ""^stop "'? –

+0

Dipende. Parlando in termini di sintassi java, possiamo usare l'oggetto Pattern and Matcher per usare regex o il metodo direct use .matches() con oggetto String. Si distinguono in seguito come qui sotto: '' Codice delle linea String = "stopped"; '' String pattern = "^ fermata"; '' pattern r = Pattern.compile (pattern); '' Matcher m = r.matcher (riga); ' ' System.out.println (m.find()); // stampa true' 'System.out.println (line.matches (pattern)); // prints false' –

+0

Questo corrisponde solo se la parola all'inizio della riga. Se le parole che iniziano con "stop" si trovano nel mezzo della linea o alla fine, questa espressione regolare non corrisponderà. @StephenRauch se si omette [a-z] * non si otterrebbero parole come "fermarsi" del tutto. Nel caso di "arresto" si otterrà "stop" e "ping" sarebbe mancante. –

1

Come ha detto @SharadHolani. Questo non corrisponderà a tutte le parole che iniziano con "stop"

. Solo se è all'inizio di una riga come "smettere di andare". @Waxo ha dato la risposta giusta:

Questo è leggermente meglio, se si vuole adattarsi a qualsiasi parola che inizia con "fermata" e contenente altro che le lettere da A alla Z.

\bstop[a-zA-Z]*\b 

Ciò corrisponde a tutti i

arresto (1)

arresto casuale (2)

arresto (3)

vogliono a fermata (4)

prega arresto (5)

Ma

/^stop[a-zA-Z]*/ 

sarebbe solo match (1) fino a (3), ma non (4) & (5)

Problemi correlati