Usa lookahead/lookbehind affermazioni:
(?<![\S"])([^"\s]+)(?![\S"])
Esempio:
>>> import re
>>> a='"quick" "brown" fox jumps "over" "the" lazy dog'
>>> print re.findall('(?<![\S"])([^"\s]+)(?![\S"])',a)
['fox', 'jumps', 'lazy', 'dog']
La cosa principale qui è lookahead/lookbehind affermazioni. Puoi dire: voglio questo simbolo prima dell'espressione ma non voglio che faccia parte della partita stessa. Ok. Per utilizzare affermazioni:
(?<![\S"])abc
che è un lookbehind negativo . Ciò significa che si desidera abc
ma senza [\S"]
prima di esso, ciò significa che prima non deve essere presente alcun carattere non spaziale (inizio della parola) o "
.
Questo è lo stesso, ma nella direzione opposta:
abc(?![\S"])
Questo è un lookahead negativo . Ciò significa che vuoi abc
ma senza [\S"]
dopo it.
Ci sono quattro affermazioni differenet del tipo in generale:
(?=pattern)
is a positive look-ahead assertion
(?!pattern)
is a negative look-ahead assertion
(?<=pattern)
is a positive look-behind assertion
(?<!pattern)
is a negative look-behind assertion
fonte
2012-07-04 08:05:20
è possibile abbinare tutte le stringhe, che ha citato con '" 'e aggiungere' NOT' per questo filtro :) – gaussblurinc
modo che si desidera questo per afferrare 'fox jump lazy dog'? – jared
@jared: si lo stesso – Shades88