Вопрос:

Заменить второй символ строки

regex vb.net

148 просмотра

6 ответа

34 Репутация автора

У меня есть строковая переменная.

Dim str As String = "ABBCD"

Я хочу заменить только второй символ 'B' в str (я имею в виду второе вхождение)

мой код

Dim regex As New Regex("B")
Dim result As String = regex.Replace(str, "x", 2)

'result: AxxCD
'but I want: ABxCD

Какой самый простой способ сделать это с помощью регулярных выражений.

Спасибо

Автор: samgi Источник Размещён: 04.05.2014 07:10

Ответы (6)


1 плюс

25219 Репутация автора

Как насчет:

resultString = Regex.Replace(subjectString, @"(B)\1", "$+x");
Автор: Ron Rosenfeld Размещён: 04.05.2014 07:18

1 плюс

35407 Репутация автора

Используйте позитивный взгляд сзади:

Dim regex As New Regex("(?<=B)B")

Live демо

Автор: revo Размещён: 04.05.2014 07:21

1 плюс

10970 Репутация автора

Если ABCABCABCдолжен произвести ABCAxCABC, то будет работать следующее регулярное выражение:

(?<=^[^B]*B[^B]*)B

Визуализация регулярных выражений

Использование:

Dim result As String = Regex.Replace(str, "(?<=^[^B]*B[^B]*)B", "x")
Автор: Ulugbek Umirov Размещён: 04.05.2014 08:18

1 плюс

1351 Репутация автора

Решение
    Dim str As String = "ABBCD"
    Dim matches As MatchCollection = Regex.Matches(str, "B")
    If matches.Count >= 2 Then
        str = str.Remove(matches(1).Index, matches(1).Length)
        str = str.Insert(matches(1).Index, "x")
    End If

Сначала мы объявляем строку «str», затем находим совпадения «B». Если мы нашли два или более результатов, замените второй результат на «x».

Автор: Aly El-Haddad Размещён: 04.05.2014 10:09

1 плюс

52252 Репутация автора

Я предполагаю, BBчто это просто пример, может быть CC, DDи EEт. Д.
Исходя из этого, регулярное выражение ниже заменит любой повторяющийся символ в строке.

resultString = Regex.Replace(subjectString, @"(\w)\1", "$1x");
Автор: Pedro Lobito Размещён: 04.05.2014 11:46

0 плюса

1 Репутация автора

'Alternative way to replace the second occurrence
    'only of B in the string with X
    Dim str As String = "ABBCD"
    Dim pattern As String = "B"
    Dim reg As Regex = New Regex(pattern)
    Dim replacement As String = "X"
    'find position of second B
    Dim secondBpos As Integer = Regex.Matches(str, pattern)(1).Index
    'replace that B with X
    Dim result As String = reg.Replace(str, replacement, 1, secondBpos)
    MessageBox.Show(result)
Автор: justaguest Размещён: 05.05.2014 01:31
Вопросы из категории :
32x32