Ho letto tutti i post correlati e ho perlustrato internet, ma questo mi sta veramente battendo.Come posso rendere meno avido lo sguardo negativo di Python?
Ho del testo contenente una data.
Vorrei acquisire la data, ma non se è preceduta da una determinata frase.
Una soluzione semplice è quella di aggiungere un aspetto negativo al mio RegEx.
Ecco alcuni esempi (utilizzando la ricerca).
Voglio solo catturare la data se non è preceduta dalla frase "as of".
19-2-11
qualcosa qualcosa 15-4-11
tali e quali di 29-5-11
Qui è la mia espressione regolare:
(?<!as of)(\d{1,2}-\d{1,2}-\d{2})
Risultati previsti:
['19 -2-11 ']
['15 -4-11']
[]
I risultati effettivi:
['19] -2-11'
['15 -4-11 ']
[' 9-5-11' ]
Si noti che è 9 non 29. Se cambio \d{1,2}
a qualcosa di solido come \d{2}
al primo modello :
bad regex for testing: (?<!as of)(\d{2}-\d{1,2}-\d{2})
Quindi ho ottenuto i risultati previsti. Ovviamente questo non va bene perché mi piacerebbe abbinare i giorni a 2 cifre così come i giorni a una cifra.
A quanto pare il mio aspetto negativo è avido di curiosità, più della mia acquisizione di data, quindi sta rubando una cifra da esso e in mancanza. Ho provato ogni mezzo per correggere l'avidità a cui riesco a pensare, ma non so proprio di aggiustarlo.
Vorrei che la mia acquisizione di data corrispondesse alla massima avidità, e quindi applicare la mia immagine negativa. È possibile? Il mio problema mi sembrava un buon uso di sguardi negativi e non eccessivamente complicato. Sono sicuro di poterlo realizzare in un altro modo, se devo, ma mi piacerebbe imparare come farlo.
Come posso rendere meno avido lo sguardo negativo di Python?
Questo è fantastico, trovo '(?:^| \ S +)' e la tua spiegazione è molto chiara. Sento la mia domanda ha una risposta.:) Puramente per motivi di conoscenza e non di necessità mi piacerebbe imparare come modificare questo in modo che '\ s' sia opzionale, tale che' qualcosa qualcosa da 15-4-11 'potrebbe corrispondere, ma potrei essere in grado di capire fuori me stesso. Grazie! –
@ChristopherGalpin Penso che possa essere ottenuto molto facilmente usando '*' (da 0 a infinito occorrenze) invece di '+' (da 1 a infinito occorrenze) in questa parte del modello: '(?:^| \ S +) ' – ovgolovin
Avevo sperato che fosse così facile ma evidentemente no, interrompe la partita' as of' nello stesso modo della domanda originale. –