Domanda

Sto cercando di abbinare le parti di un numero di versione (Major.Minor.Build.Revision) con le espressioni regolari C #. Tuttavia, sono abbastanza nuovo nello scrivere Regex e persino usare Expresso si sta rivelando un po 'difficile. In questo momento, ho questo:

(?<Major>\d*)\.(?<Minor>\d*)\.(?<Build>\d*)\.(?<Revision>\d*)

Funziona, ma richiede l'esistenza di ogni parte del numero di versione. Quello che vorrei fare è anche abbinare versioni come:

2.13

In questo caso, i gruppi Build e Revision devono restituire valori null. Sentiti libero di suggerire un metodo migliore se sto sbagliando tutto.

È stato utile?

Soluzione

(?<Major>\d*)\.(?<Minor>\d*)(\.(?<Build>\d*)(\.(?<Revision>\d*))?)?

Rende facoltative la terza e la quarta parte.

Altri suggerimenti

So che questo non è un regex, ma System.Version fa tutto il lavoro per te.

Testato in VBScript, questo modello:

^(\d+)(\.\d+)?(\.\d+)?(\.\d+)?$

Convaliderà tutto quanto segue True:

  • 23
  • 23.1
  • 23.1.1
  • 23.1.1.1

E quanto segue tutto False:

  • 23.11.11.33.11
  • 23.43 2.1
  • 44.11.2 3
  • 3q.4.2.1
  • 3.4.
  • 4.3.21a

Se non si desidera utilizzare Regex, è possibile provare:

System.Diagnostics.FileVersionInfo fvi = System.Diagnostics.FileVersionInfo.GetVersionInfo(<string filePath>);

int major = fvi.FileMajorPart;
int minor = fvi.FileMinorPart;
int build = fvi.FileBuildPart;

La risposta sopra non funziona correttamente

(?<Major>\d*)\.(?<Minor>\d*)(\.(?<Build>\d*)(\.(?<Revision>\d*))?)?

prova questo

  var regularExpression = @"^(\d+\.)?(\d+\.)?(\d+\.)?(\*|\d+)$";
                var regex = Regex.IsMatch("1.0.0.0", regularExpression, RegexOptions.IgnoreCase | RegexOptions.CultureInvariant);
                Console.WriteLine(regex);

Prova qualcosa del genere:

(?<Major>\d*)\.?(?<Minor>\d*)?\.?(?<Build>\d*)?\.?(?<Revision>\d*)?

Ho semplicemente aggiunto alcune " zero o una " quantificatori per i gruppi di acquisizione e anche per i punti nel caso in cui non siano presenti.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top