2013-02-08 10 views
7

Sto cercando una regex che corrisponde prima parola in una frase escluso punteggiatura e spazi vuoti. Ad esempio: "Questo" in "Questa è una frase". e "Prima" in "In primo luogo, vorrei dire \" Ciao \ ""Regex per abbinare prima parola nella frase

questo non funziona:

"""([A-Z].*?(?=^[A-Za-z]))""".r 
+3

Che sapore di regex è questo? –

+0

Le parole possono contenere numeri? – endy

+0

'([az] +)', senza distinzione tra maiuscole e minuscole, dovrebbe essere sufficiente per l'inglese "non complicato". Tuttavia, fallirà rapidamente per i caratteri non latini, quindi aggiorna a [usa classi di caratteri Unicode] (http: //stackoverflow.com/a/5005122/166390) come appropriato! Si noti che questo presuppone una regex NFA (come Ruby: D) che "combacerà con la prima cosa che può", ma che funziona a favore qui in quanto non c'è bisogno di ancorare o altrimenti di complessi sguardi. –

risposta

2
[a-z]+ 

Questo dovrebbe essere sufficiente in quanto otterrà il primo caratteri az (presumendo maiuscole e minuscole).

Nel caso in cui non funzioni, è possibile provare [a-z]+\b o anche ^[a-z]\b, ma l'ultimo presuppone che la stringa inizi con la parola.

7
(?:^|(?:[.!?]\s))(\w+) 

Corrisponde alla prima parola in ogni frase.

http://rubular.com/r/rJtPbvUEwx

+0

Modificato il mio post. Buona pesca. – endy

+1

"123 Questo non funziona" come restituirà "123" invece di "Questo" – konyak

+0

Questo perché è la prima parola. Come aveva chiesto l'OP. Se vuoi che corrisponda alla prima parola del dizionario, dovresti cercare un posto diverso da quello regex. – endy

1

È possibile utilizzare questa espressione regolare: ^\s*([a-zA-Z0-9]+).

La prima parola può essere trovato in un gruppo catturato.

1

È possibile utilizzare questa espressione regolare: ^[^\s]+ o ^[^ ]+.

0

questo è un vecchio thread, ma la gente potrebbe bisogno di questo come ho fatto io. Nessuna delle opere di cui sopra se la vostra frase inizia con uno o più spazi. Ho fatto questo per ottenere la prima parola (non vuoto) nella frase:

(?<=^[\s"']*)(\w+) 

Spiegazione:

(?<=^[\s"']*) lookbehind positiva al fine di cercare l'inizio della stringa, seguita da zero o più spazi o caratteri di punteggiatura (puoi aggiungere altro tra parentesi), ma non includerlo nella partita.
(\w+) la partita reale della parola, che verrà restituita

le seguenti parole nella frase non corrispondono in quanto non soddisfano il lookbehind.