Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it L'avatar di Veronica80
    Registrato dal
    May 2006
    Messaggi
    2,117

    [VB.NET]- Espressioni Regolari

    Ciao a tutti!
    Mi ritrovo di nuovo a dover smanettare con le RegEx che (seppure ci ho provato e riprovato 1000 volte) proprio non mi vogliono entrare in testa!

    Vi spiego il mio problema:

    Ho una serie di testi sotto forma di stringa dentro i quali dovrei cercare alcuni dati.
    Uno di questi dati sono delle versioni di applicativo.
    Il problema è che il testo varia ogni volta a seconda di chi l'ha scritto quindi la versione può avere vari formati. Esempio:
    • v. 1.0
    • Ver 1.0
    • Versione 1.0
    • Version 1.0

    Il dato che io devo recuperare è '1.0' (sottoforma di stringa) nonchè devo prevedere eventuali formati diversi (Ex: 1.0.0.2).

    E' possibile farlo con RegEx? O è troppo irregolare come formato di stringa?

    Grazie a tutti!

  2. #2
    cerca lo spazio, dopo quello c'è la versione. così gestisci anche release, rel, ecc ecc

  3. #3
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,463
    Quote Originariamente inviata da Veronica80 Visualizza il messaggio
    Mi ritrovo di nuovo a dover smanettare con le RegEx che (seppure ci ho provato e riprovato 1000 volte) proprio non mi vogliono entrare in testa!
    In effetti, le espressioni regolari si possono tranquillamente considerare un linguaggio a sé stante.

    Quote Originariamente inviata da Veronica80 Visualizza il messaggio
    E' possibile farlo con RegEx? O è troppo irregolare come formato di stringa?
    E' possibilissimo, anche se è probabile che nel tuo caso tu debba fare uso di più espressioni regolari.

    Andando per ordine, potresti iniziare con qualcosa del genere:
    [\w\.\s]+(?<VER>\d\.\d)

    L'espressione consente di "matchare" tutte le occorrenze di una stringa che inizia con un numero imprecisato (ma maggiore di zero) di caratteri come lettere, punti, spazi, ecc. rappresentata da questa parte:
    [\w\.\s]+

    La seconda parte dell'espressione si riferisce alla reale informazione che ti serve catturare, tant'è che l'ho inclusa in un gruppo (con le parentesi tonde) e ho anche assegnato un nome allo stesso (VER), che permette di prendere tutte le sequenze di caratteri composte da 1) una cifra, 2) un punto, 3) un'altra cifra:
    (?<VER>\d\.\d)

    Questa espressione regolare permette di identificare tutti gli esempi che hai riportato nel tuo messaggio iniziale, isolando la parte relativa al solo numero di versione, che viene inserita nel gruppo "VER" (vedi Groups per approfondire).

    Può accadere che tu debba considerare altri possibili formati rispetto a quello sopra; in tal caso, potresti combinare più espressioni usando il carattere "pipe" (|) oppure - forse la soluzione più semplice - prevedere l'applicazione di più di una espressione regolare: se la prima fallisce, vuol dire che hai già esaminato una serie di casistiche e puoi provarne una seconda, che ne ricopre altre, fino a quando il valutatore dell'espressione non ti restituisce un responso positivo, ossia fino a quando non hai trovato una espressione che viene soddisfatta, avendo sempre cura di "isolare" la parte che ti interessa in un gruppo in modo da poterla catturare.

    Ad esempio, per supportare numeri di versioni a 2 cifre o a quattro cifre, potresti applicare in sequenza queste espressioni:
    ^[\w\.]+\s(?<VER>\d\.\d)$
    ^[\w\.]+\s(?<VER>\d\.\d\.\d\.\d)$

    Per agevolarti la creazione delle espressioni, scarica un tool che ti consenta di testarle prima; io ad esempio uso Expresso.

    Per scriverle più agevolmente, prova a leggere questo tutorial da 30 minuti (dichiarati).

    Fammi sapere se ci sono dei progressi.

    Un saluto!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  4. #4
    sicuri che non stiamo sparando a una mosca con un bazooka?

    codice:
    numeroVersione = versioneCompleta.Split(" "c)(1)

  5. #5
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,463
    Quote Originariamente inviata da optime Visualizza il messaggio
    sicuri che non stiamo sparando a una mosca con un bazooka?
    Il tutto dipende dalla variabilità dei modi in cui è stato espresso quel numero di versione.
    In breve, si tratta di capire se la mosca è una mosca o se, in realtà, è un fenicottero.

    In ogni caso, direi che sono state vagliate entrambe le ipotesi, quindi bene così.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.