Как показать все числа в этой строке

Я хочу показать только числа из строки.

Это мой вклад:

"aa[12]bb[34]cc[56]dd[78]"

Мой код до сих пор:

Dim total As String
total = TextBox1.Text
Dim istart As String
Dim iend As String
Dim first As String
Dim second As String
Dim third As String
Dim four As String
Dim icount As String
icount = Len(total)
Do While icount > 0
    istart = total.IndexOf("[")
    iend = total.IndexOf("]") '
    If iend > 0 Then
        first = total.Substring(istart + 1, iend - istart - 1)
        MessageBox.Show(first)

        second = total.Substring(iend + 1, icount - iend - 1)
        MessageBox.Show(second)

        third = second.Substring(istart + 1, iend - istart - 1)
        MessageBox.Show(third)

    Else
        icount = 0
    End If
Loop

Я ожидаю выхода

12
34
56
78

Ваши числа всегда в скобках, как это?

Michaël Corriveau-Côté 22.05.2019 13:46

да пользователь всегда вводит этот тип ввода

Fresher 22.05.2019 13:48

И вы хотите, чтобы конечные числа были разделены пробелом? Итак, вы получите Двенадцать Тридцать Четыре Пятьдесят Шесть Семь-Восемь?

Michaël Corriveau-Côté 22.05.2019 13:52

да или другой вариант, например, показать номер в окне сообщения

Fresher 22.05.2019 13:53
3 метода стилизации элементов HTML
3 метода стилизации элементов HTML
Когда дело доходит до применения какого-либо стиля к нашему HTML, существует три подхода: встроенный, внутренний и внешний. Предпочтительным обычно...
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
0
4
87
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Меня вдохновил эта почта.

Private Function StackOverflowTest() As String
    Dim x As String = "aa[12]bb[34]cc[56]dd[78]"        
    Dim FinalString As String = ""
    Dim NumberFound As Boolean = False
    For Each ch As Char In x.ToCharArray()
        If Char.IsDigit(ch) Then
            FinalString += ch
            NumberFound = True
        Else
            If NumberFound Then FinalString += " "
            NumberFound = False
        End If
    Next

    FinalString = FinalString.Remove(FinalString.Length - 1, 1)
    MsgBox(FinalString)

    Return FinalString
End Function
Ответ принят как подходящий

Вот простой способ с Regex:

Dim text As String = "aa[12]bb[34]cc[56]dd[78]"

Dim numbers As String() = _
    Regex _
        .Matches(text, "(\d+)") _
        .Cast(Of Match)() _
        .Select(Function(x) x.Value) _
        .ToArray()

Или, если важны [ и ]:

Dim numbers As String() = _
    Regex _
        .Matches(text, "\[(\d+)]") _
        .Cast(Of Match)() _
        .Select(Function(x) x.Groups(1).Value) _
        .ToArray()
For Each number In numbers
    Console.WriteLine(number)
Next

Вот что вы получаете:

12 
34 
56 
78 

Я думаю, важно, чтобы числа были в квадратных скобках, поэтому, возможно, что-то с немного другим регулярным выражением: String.Join(vbCrLf, Regex.Matches(s, "\[([0-9]+)]").Cast(Of Match).Select(Function(m) m.Groups(1).Value))

Andrew Morton 22.05.2019 14:27

@AndrewMorton Я думаю, что автор изначально хотел, чтобы вывод был в виде одной строки, разделенной пробелами, а не возвратом каретки. Возможно, отредактировав исходный вопрос, вы изменили его волю. Но вы отлично поработали над переформатированием кода и поста в целом.

Michaël Corriveau-Côté 22.05.2019 14:52

В исходном вопросе числа были в отдельных строках - они появлялись только в одной строке из-за того, что HTML сворачивал пробелы в один пробел. Из отдельных MessageBox.Shows я предполагаю, что отдельные строки должны были иллюстрировать несколько появлений диалога, поэтому, возможно, мне следовало разделить их еще больше. Во всяком случае, ОП, кажется, доволен тем, что они получили.

Andrew Morton 22.05.2019 15:01

Другим подходом к такому форматированию может быть использование разрыва строки html <br>, но блочные кавычки тоже работают. Хорошо поймал

djv 22.05.2019 15:57

Нелинковый способ. Не уверен, хотел ли он получить результат в виде строки или массива. Это создает строку.

Dim SourceString As String = "aa[12]bb[34]cc[56]dd[78]"
Dim FinalString As String = String.Empty
Dim Chars() = SourceString.Split("["c)
Dim SecondString = Join(Chars)
Dim NextChars() = SecondString.Split("]"c)
For Each Str As String In NextChars
    FinalString &= System.Text.RegularExpressions.Regex.Replace(Str, "[^\d]", "") & Environment.NewLine
Next

Что там за Join?

Enigmativity 23.05.2019 01:13

@Enigmativity Это похоже на Метод Microsoft.VisualBasic.Strings.Join, где необязательный второй параметр (строка соединения) по умолчанию равен пробелу.

Andrew Morton 23.05.2019 17:38

@Enigmativity Извините, я не видел вашего комментария в своем почтовом ящике. Андрей прав. В этом случае это просто объединение всех элементов Chars() обратно в строку, которая будет снова разделена на элементы NextChars(), которые затем удаляют все неальфа-символы в For Each...

Mr. Tripodi 23.05.2019 17:44

Другие вопросы по теме