2015-07-11 10 views
5

Sto usando python, e in questo momento vorrei qualcosa di simile fino allo spazio o alla fine della stringa, quindi ho avuto la regex ".*?[ $]".C'è un modo per usare caratteri speciali all'interno di una serie regolare?

Ma dopo aver provato e visto che non funzionava, ho guardato il documentation e ho scoperto che i caratteri speciali perdevano il loro significato speciale all'interno dei set.

C'è un modo per rimettere questo significato nel set?

+1

Nope -'''I caratteri speciali perdono il loro significato speciale all'interno degli insiemi. '' '. Torna al tavolo da disegno. – wwii

+0

E se ci fosse una stringa con un carattere - uno spazio? Cosa accadrebbe se una stringa fosse vuota? – sln

+0

@wwii Grazie, è esattamente quello che mi stavo chiedendo. (Anche se le risposte mi aiutano con il mio problema.) –

risposta

0

No, speciale il significato non può essere rimesso nel set, quindi la regex deve essere riscritta.

Ho finito per utilizzare la seguente espressione regolare: .*?(?:\s|$) che era una combinazione di risposte diverse.

1

Questo perché espressione regolare non è corretto, la vostra espressione regolare corrisponderà .*? + spazio o un carattere $ letteralmente. (Si noti che ogni personaggio regex tranne ] nella classe personaggio sarà sfuggito)

invece si può usare uno sguardo positivo avanti :

.*(?= |$) 

See demo https://regex101.com/r/sF3qU1/1

1

È possibile utilizzare il seguente:

a = "testing for fun" 

    n = match('[^\s]+',a) 

>> testing 
+1

Grazie! Questo aiuta! –

2

Penso che per il tuo scopo sarebbe sufficiente una parola di ancoraggio. Da re documentazione interna (eseguire pydoc re se si utilizza un sistema Unix-like):

\b  Matches the empty string, but only at the start or end of a word. 

Così, il vostro regex sarà simile:

".*?\\b" 

o

r".*?\b" 
Problemi correlati