2017-01-06 2 views
1

Comment puis-je créer une expression regex pour les nombres et les lettres? Chaque fois que je l'entrée, il lit seulement les chaînes afin de ne pas randomiser. disons que je saisis 312 < - ce serait un identifiant invalide car sa variable numérique n'est pas dans l'ordre. Sur les lettres j'ai essayé a123456789 donc quand j'introduis a1, a2, a3 il lit comme identifiant parce que c'est dans l'ordre. et je voulais aussi créer une autre variable qui va combiner les chiffres et les lettres.VB.NET Expression régulière 0-9 et a-z ne fonctionne pas?

Dim input As String = txtInput.Text 
    Dim symbol As String = "\s*([-+*/=])\s*" 
    Dim numbers As String = "123456789" //("[0-9]") <-- doesnt work? 
    Dim letters As String = "abcdefghijklmnopqrstuvwxyz" // ("[a-z]")<-also 

    Dim substrings() As String = Regex.Split(input, symbol) 

    For Each match As String In substrings 
     If symbol.Contains(match) Then 
      lstOutput.Items.Add(match & " - operator") 
     ElseIf numbers.Contains(match) Then 
      lstOutput.Items.Add(match & " - number") 
     ElseIf letters.Contains(match) Then 
      lstOutput.Items.Add(match & " - identifier") 
     Else 
      lstOutput.Items.Add(match & " - Invalid Identifier") 
     End If 
    Next 

entrée: c1 + 2c + cad + C1B

résultat escompté:

c1 - l'identificateur

    • opérateur

2c - identifiant invalide // invalide parce que le 1er caractère est le numéro

    • opérateur

cao - Identifiant

    • opérateur

C1B - Identifiant

Répondre

1

Vous pouvez utiliser des modèles pour regex numéros et identifiants avec Regex.IsMatch.

Numéro modèle:

  • ^ - début de la chaîne
  • [0-9]* - 0+ chiffres
  • \.? - un point en option
  • [0-9]+ - 1+ chiffres
  • $ - fin de corde

modèle Identificateur:

  • ^ - début de la chaîne
  • [a-zA-Z_] - une lettre ASCII ou _
  • [a-zA-Z0-9_]* - 0+ lettres ASCII, des chiffres ou _
  • $ - fin de la chaîne.

    entrée Dim As String = "c1 + 2c + cad + C1B" symbole Dim As String = "\ s * ([- + /=]) \ s" nombres Dim As String = «^[ 0-9] .? [0-9] + $ » lettres Dim As String = "^ [a-zA-Z _] [a-zA-Z0-9_] $"

    Dim sous-chaînes() As String = Regex.Split (entrée, symbole)

    Pour chaque match As String Dans Si Regex.IsMatch substrings (correspondance, symbole) Puis Console.WriteLine (match de & "- opérateur") ElseIf Regex.IsMatch (correspondance, chiffres) puis Console.WriteLine (match de & "- Numéro") ElseIf Regex.IsMatch (correspondance, lettres) Puis Console.WriteLine (match de & "- identifiant ") Else Console.WriteLine (match de &" - Identifiant non valide ") End Si suivant

Voir la VB.NET demo sortie

c1 - identifier 
+ - operator 
2c - Invalid Identifier 
+ - operator 
cad - identifier 
+ - operator 
c1b - identifier