Visual Basic, найти и заменить текст - PullRequest
0 голосов
/ 11 июля 2019

У меня есть такие строки:

AABCAABDCEAADAAECDBAACBAA

ABCCABAADCDACADCDAABACCBA

ACCABAAADCEAECDAAAABACCA

...

1011 **

Эти строки содержат только символы, а не цифры.

Мне нужно заменить эти строки на эти формы и показать результаты в текстовом поле:

2A, 1B, 1C, 2A, 1B, 1D, 1C, 1E, 2A, 1D,2A, 1E, 1C, 1D, 1B, 2A, 1C, 1B, 2A

1A, 1B, 2C, 1A, 1B, 2A, 1D, 1C, 1D, 1A, 1C, 1A, 1D, 1C, 1D, 2A, 1B, 1A, 2C, 1B, 1A

1A, 2C, 1A, 1B, 4A, 1D, 1C, 1E, 1A, 1E, 1C, 1D, 4A, 1B, 1A,2C, 1A

  • Я должен добавить запятую и пробел после каждого символа.
  • Собирать одинаковые символы и добавлять количество в начале каждого символа.

Я новичок в Visual Basic.Я искал программное обеспечение «Найти и заменить» в сети раньше, но они не работали для меня.Я также попробовал Notepad ++ (и это плагин "ToolBucket").Но это не сохранить настройки «найти и заменить» (только с макросом).Итак, я загрузил «Visual Basic 2010 Express» с веб-сайта Microsoft.Спасибо за ваш ответ и помощь заранее.

Ответы [ 2 ]

0 голосов
/ 11 июля 2019

Способ с Regex =>

Dim re As Regex = New Regex("(\w)(\1){0,}", RegexOptions.Compiled)
Dim sString As String = re.Replace("AABCAABDCEAADAAECDBAACBAA", Function(match) match.Length.ToString() + match.Value(0) + ", ")
Dim sResult As String = sString.Remove(sString.LastIndexOf(","))
Console.WriteLine(sResult)

Результат =>

2A, 1B, 1C, 2A, 1B, 1D, 1C, 1E, 2A, 1D, 2A, 1E, 1C, 1D, 1B, 2A, 1C, 1B, 2A
0 голосов
/ 11 июля 2019

Вы можете получить номера повторяющихся заглавных символов, используя группу захвата и обратную ссылку \1 к этой группе.

При циклическом сопоставлении их можно добавить вколлекции, а затем распечатайте их, используя запятую и пробел в качестве разделителя.

Затем вы можете добавить эту строку в текстовое поле.

([A-Z])\1*

Объяснение

  • ( Группа захвата
    • [A-Z] Соответствует одному символу в верхнем регистре
  • ) Закрыть группу захвата
  • \1* Повторите обратную ссылку на группу 1 0+ раз, чтобы также получить одиночные матчи

Regex demo | VB.NET demo

Например:

Dim str As String = "ACCABAAAADCEAECDAAAABACCA"
Dim pattern As String = "([A-Z])\1*"
Dim list As New List(Of String)
Dim matches As MatchCollection = Regex.Matches(str, pattern)
For Each m As Match In matches
    list.Add(m.Value.Length() & m.Groups(1).Value)
Next m

Console.WriteLine(string.Join(", ", list))

Результат

1A, 2C, 1A, 1B, 4A, 1D,1C, 1E, 1A, 1E, 1C, 1D, 4A, 1B, 1A, 2C, 1A

...