Pergunta

Eu estou tentando corresponder as partes de um número de versão (Major.Minor.Build.Revision) com C # expressões regulares. No entanto, eu sou muito novo para escrever Regex e até mesmo usando Expresso está provando ser um pouco difícil. Agora, eu tenho este:

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

Isso funciona, mas exige que cada parte do número de versão existe. O que eu gostaria de fazer é também corresponder versões como:

2.13

Neste caso, a compilação e grupos de revisão precisará retornar valores nulos. Sinta-se livre para sugerir um método melhor se eu vou sobre esta tudo errado.

Foi útil?

Solução

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

faz a terceira e quarta partes opcionais.

Outras dicas

Eu sei que este não é um regex, mas System.Version faz todo o trabalho para você.

Testado em VBScript, este padrão:

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

irá validar todas as seguintes True:

  • 23
  • 23,1
  • 23.1.1
  • 23.1.1.1

E a seguir tudo falso:

  • 23.11.11.33.11
  • 23,43 2.1
  • 44.11.2 3
  • 3q.4.2.1
  • 3.4.
  • 4.3.21a

Se você não quiser usar Regex você poderia tentar:

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

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

Acima de resposta não está funcionando corretamente

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

Tente este,

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

Tente algo parecido com isto:

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

Eu simplesmente adicionados alguns quantificadores "zero ou um" para os grupos de captura e também para os pontos apenas no caso de eles não estão lá.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top