2012-10-01 18 views
13

Sono nuovo di regex e sto cercando di trovare qualcosa che corrisponderà un testo come di seguito:Espressione regolare con i caratteri jolly per abbinare qualsiasi carattere

ABC: (z) 2 Gennaio 1999 \ n

Note:

  • testo sarà sempre iniziare con "ABC:"
  • ci può essere zero, uno o più spazi tra ':' e (Z).
  • Variazioni (z) anche possibile - (zz), (zzzzzz) .. ecc ma sempre un carattere non cifre racchiuso in "()"
  • ci possono essere zero, uno o più spazi tra (z) e Jan
  • gennaio potrebbe essere gennaio, gennaio, ecc
  • data couldbe in qualsiasi formato e può/non può contenere altro testo come parte di esso in modo mi piacerebbe davvero sapere se v'è una regex che posso utilizzare per catturare tutto ciò che si trova tra '(z)' e '\ n'

Qualsiasi aiuto è molto apprezzato! Grazie

+2

Cosa hai provato finora? Che cosa sta facendo è diverso da quello che vuoi? – octern

+0

Nota: sto usando regexplanet.com/advanced/java/index.html per testare le mie espressioni regolari .. scusa avrei dovuto accennare prima. Quindi, usando la stringa di esempio "ABC: (z) 2 febbraio 1988 \ n" .. Il mio risultato per Gruppo 2 dovrebbe essere "(z) 2 febbraio 1988" – chapstick

risposta

26

Il seguente dovrebbe funzionare:

ABC: *\([a-zA-Z]+\) *(.+) 

Spiegazione:

ABC:   # match literal characters 'ABC:' 
*    # zero or more spaces 
\([a-zA-Z]+\) # one or more letters inside of parentheses 
*    # zero or more spaces 
(.+)   # capture one or more of any character (except newlines) 

per ottenere il vostro raggruppamento desiderato sulla base dei commenti qui sotto, è possibile utilizzare il seguente:

(ABC:) *(\([a-zA-Z]+\).+) 
+0

Grazie per l'espressione per favore vedi il mio commento per deltree sotto – chapstick

+0

@chapstick - Aggiunta un'altra versione che dovrebbe avere la corrispondenza del gruppo 2 dalle parentesi alla fine della riga. –

+0

Grazie a quello ha funzionato! – chapstick

0

Questo dovrebbe soddisfare i tuoi requisiti.

ABC:\s*(\(\D+\)\s*.*?)\\n

Qui è con alcuni test http://www.regexplanet.com/cookbook/ahJzfnJlZ2V4cGxhbmV0LWhyZHNyDgsSBlJlY2lwZRiEjiUM/index.html

Futher lettura sulle espressioni regolari: http://www.regular-expressions.info/characters.html

+0

Grazie per le risposte. Sto usando http://www.regexplanet.com/advanced/java/index.html per testare le mie espressioni regolari .. scusa avrei dovuto accennare prima. Quindi usando la stringa di esempio "ABC: (z) 2 febbraio 1988 \ n" .. Il mio risultato per il gruppo 2 dovrebbe essere "(z) 2 febbraio 1988" ... Non riesco a ottenere quello usando una delle espressioni sopra :( – chapstick

+0

@chapstick 'cattura tutto e tutto ciò che si trova tra '(z)' e '\ n'' così vuoi (z) e \ n nel gruppo? E perché il gruppo 2? – deltree

+0

Voglio (z) ma solo cose fino a non includere '\ n'. Ho volutamente evitato di specificare il motivo per cui Gruppo 2 .. qualcos'altro userà i valori nel Gruppo 2 per eseguire ulteriori elaborazioni :) – chapstick

4

Senza conoscere l'attuazione esatto regex si sta facendo uso di, posso dare solo consigli generali . (La sintassi sarò perl come questo è quello che so, alcune lingue richiedono tweaking)

Guardando ABC: (z) jan 02 1999 \n

  • La prima cosa da abbinare è ABC: Quindi, utilizzando la nostra espressione regolare è /ABC:/
  • Tu dici che ABC è sempre all'inizio della stringa, quindi /^ABC/ assicurerà che ABC sia all'inizio della stringa.

  • È possibile abbinare gli spazi con la direttiva \s (notare il caso).Con tutte le direttive è possibile abbinare una o più con + (o 0 o più con *)

  • Hai bisogno di fuggire l'utilizzo di ( e ) in quanto è un carattere riservato. così \(\)

  • è possibile abbinare qualsiasi spazio o non carattere di nuova riga con .

  • È possibile abbinare qualsiasi cosa con .*, ma è necessario fare attenzione a non siete troppo avidi e catturare tutto.

Quindi, al fine di catturare ciò che hai chiesto. Vorrei usare /^ABC:\s*\(.+?\)\s*(.+)$/

che ho letto come:

Inizia con ABC:

possono avere alcuni spazi

ha (

ha alcuni caratteri

HAS)

può disporre di alcuni spazi

quindi acquisire tutto fino alla fine della riga (che è $).

mi raccomando tenere una copia dei seguenti posa su http://www.cheatography.com/davechild/cheat-sheets/regular-expressions/

Problemi correlati