2010-11-04 15 views
18

Ho appena chiesto a questo question di utilizzare un'espressione regolare per consentire numeri compresi tra -90.0 e +90.0. Ho avuto alcune risposte su come implementare l'espressione regolare, ma la maggior parte delle risposte ha anche detto che sarebbe meglio gestire senza usare un'espressione regolare o usare un'espressione regolare sarebbe eccessivo. Quindi, come decidi quando usare un'espressione regolare e quando non usare un'espressione regolare. C'è una lista di controllo che puoi seguire?Per utilizzare o non utilizzare le espressioni regolari?

+0

Aggiunto il tag C# poiché la tua domanda precedente era per C#. Spero che vada bene. – Shoban

+4

Non penso che questa domanda sia specifica per C#. –

+0

la domanda originale era specifica per l'implementazione C#; questa domanda non è specifica per l'implementazione. –

risposta

42

Le espressioni regolari sono un elaborazione del testo strumento per test basato sui caratteri. Più formalmente, le espressioni regolari sono buone a gestire i linguaggi regolari e cattive in quasi tutto il resto.

In pratica, ciò significa che le espressioni regolari non sono adatti per attività che richiedono scoperta significato (semantica) nel testo che va oltre il livello del personaggio. Ciò richiederebbe un parser completo.

Nel tuo caso particolare: riconoscere un numero in un testo è un esercizio che le espressioni regolari sono buono (i numeri decimali possono essere banalmente descritti utilizzando un linguaggio normale). Funziona a livello di personaggio.

Ma fare cose più avanzate con il numero che richiede la conoscenza del suo valore numerico (vale a dire la sua semantica) richiede l'interpretazione. Le espressioni regolari sono cattive in questo. Quindi trovare un numero nel testo è facile. Trovare un numero in un testo superiore a 11 ma inferiore a 1004 (o divisibile per 3) è difficile: richiede il riconoscimento dello che indica il numero.

+3

Ah, grazie per questo, quindi riconoscere -90 e +90 è facile, ma determinare se un numero è compreso tra -90.0 e +90.0 è più difficile. Se guardo solo per -90 o 90, allora è solo semplice testo '-90' o '90' che posso facilmente analizzare, ma se sto cercando dei numeri tra questi, allora diventa più di un semplice testo di elaborazione . Capisco tutto correttamente? È così che ho interpretato quello che hai detto. – Xaisoft

+1

@Xaisoft: sì, l'hai interpretato correttamente. –

0

La risposta è semplice:

Se è possibile risolvere il problema senza le espressioni regolari (solo con funzioni di stringa), non si utilizza le espressioni regolari. Come è stato detto in un libro, ho letto: le espressioni regolari sono violenza sul computer.

Se è complicato utilizzare le funzioni di stringa della lingua, utilizzare le espressioni regolari.

+0

Anche se consigli pratici, non penso che questa risposta sia necessariamente * completa * consulenza. Questa particolare domanda non ha nulla a che fare con la gestione delle stringhe al di là del fatto che l'utente sta guardando le rappresentazioni di stringa dei dati decimali. – GrayWizardx

2

senza volerlo essere circolare o ottusi, si dovrebbe usare le espressioni regolari quando si dispone di una stringa che contiene informazioni strutturate in un regular language, e si desidera trasformare questa stringa in un modello a oggetti.

+0

Grazie per il link. – Xaisoft

3

Direi che le espressioni regex sono più efficaci su Stringhe. Per altri tipi di dati, le manipolazioni di quel tipo di dati saranno in genere più intuitive e forniranno risultati migliori.

Ad esempio, se si sa che si ha a che fare con DateTime, è possibile utilizzare i metodi Parse e TryParse nei diversi formati e in genere sarà più affidabile delle proprie espressioni regex.

Nel tuo esempio, hai a che fare con numeri quindi gestiscili di conseguenza.

Regex è molto potente, ma non è il codice più semplice da leggere e eseguire il debug. Quando un'altra soluzione affidabile è a portata di mano, probabilmente dovresti farlo.

+0

Questo è tecnicamente corretto ma incompleto - le espressioni regolari sono più efficaci sulle stringhe * che contengono dati regolari *. –

0

caso d'uso di base per RegEx: -

  1. avete bisogno di "coppie di valori chiave" - ​​Sia chiave e valori sono incorporati all'interno di altro testo rumoroso - non posso essere accessibili o isolate in altro modo.

  2. È necessario automatizzare l'estrazione di questi valori eseguendo il ciclo su più documenti.

  3. Numero e combinazione di coppie di valori chiave possono essere scoperti mentre si progredisce l'analisi del testo.

Problemi correlati