web-dev-qa-db-fra.com

Obtenir uniquement les nombres de la chaîne

je veux obtenir seulement des nombres de la chaîne.

De peur de dire que c'est ma chaîne:

324ghgj123

je veux obtenir:

324123

ce que j'ai essayé:

MsgBox(Integer.Parse("324ghgj123"))
16
Nh123

essaye ça:

Dim mytext As String = "123a123"
Dim myChars() As Char = mytext.ToCharArray()
For Each ch As Char In myChars
     If Char.IsDigit(ch) Then
          MessageBox.Show(ch)
     End If
Next

ou:

Private Shared Function Num(ByVal value As String) As Integer
    Dim returnVal As String = String.Empty
    Dim collection As MatchCollection = Regex.Matches(value, "\d+")
    For Each m As Match In collection
        returnVal += m.ToString()
    Next
    Return Convert.ToInt32(returnVal)
End Function
19
famf

vous pouvez utiliser Regex pour cela

Imports System.Text.RegularExpressions

puis sur une partie de votre code

Dim x As String = "123a123&*^*&^*&^*&^   a sdsdfsdf"
MsgBox(Integer.Parse(Regex.Replace(x, "[^\d]", "")))
28
John Woo

Ou vous pouvez utiliser le fait qu'une chaîne est un tableau de caractères.

Public Function getNumeric(value As String) As String
    Dim output As StringBuilder = New StringBuilder
    For i = 0 To value.Length - 1
        If IsNumeric(value(i)) Then
            output.Append(value(i))
        End If
    Next
    Return output.ToString()
End Function
5
Mark Hall
resultString = Regex.Match(subjectString, @"\d+").Value;

vous donnera ce numéro sous forme de chaîne. Int32.Parse (resultString) vous donnera alors le numéro.

2
Suraj

Vous pouvez réellement combiner certaines de ces réponses individuelles pour créer une solution sur une seule ligne qui retournera soit un entier avec la valeur 0, soit un entier qui est la concaténation de tous les nombres de la chaîne. Je ne sais pas à quel point c'est utile, cependant - cela a commencé comme une méthode pour créer une chaîne de nombres uniquement ....

    Dim TestMe = CInt(Val(New Text.StringBuilder((From ch In "123abc123".ToCharArray Where IsNumeric(ch)).ToArray).ToString))
1
jinzai
str="something1234text456"   

Set RegEx = CreateObject("vbscript.regexp")
RegEx.Pattern = "[^\d+]"
RegEx.IgnoreCase = True
RegEx.Global = True
numbers=RegEx.Replace(str, "")(0)
msgbox numbers
0
Sandip Kolawale

Fonction qui renvoie une chaîne sans chiffres

Public Function _RemoveNonDigitCharacters(S As String) As String
        Return New String(S.Where(Function(x As Char) System.Char.IsDigit(x)).ToArray)
End Function
0
Dariusz

Pour une approche de recherche linéaire, vous pouvez utiliser cet algorithme, il est en C # mais peut facilement être traduit en vb.net, j'espère que cela aide.

string str = “123a123”;

for(int i=0;i<str.length()-1;i++)
{
    if(int.TryParse(str[i], out nval))
        continue;
    else
        str=str.Rremove(i,i+1);
}
0
SajjadHashmi