Search code examples
vb.netstringoutlook-addin

String.replace adding extra characters


I am trying to replace some words in mails in Outlook. Here is my code for it

        Dim input As String = mail.HTMLBody
        Dim pattern As String = "QWQ[a-z][a-z][0-9][0-9][0-9][0-9][0-9]"
        Dim replacement As String
        Dim rgx As New Regex(pattern)

        Dim match As Match = Regex.Match(input, pattern)
        While (match.Success)
            replacement = "A" + match.Value + "A"
            input = input.Replace(match.value, replacement)
            match = match.NextMatch()
        End While
        mail.HTMLBody = input

For this input

QWQrt12345
QWQrt1234533

wwQWQrt12345
QWQrt1234534

qwwQWQrt12345

I expect output as

AQWQrt12345A
AQWQrt12345A33

wwAQWQrt12345A
AQWQrt12345A34

qwwAQWQrt12345A

But the output I am getting is

AAAAAQWQrt12345AAAAA
AAAAAQWQrt12345AAAAA33

wwAAAAAQWQrt12345AAAAA
AAAAAQWQrt12345AAAAA34

qwwAAAAAQWQrt12345AAAAA

What can be the issue?


Solution

  • The description of String.Replace states,

    Returns a new string in which all occurrences of a specified string in the current instance are replaced with another specified string.

    The important takeaway there is, "all occurrences ... are replaced." Since your replacement string is also a match for your regular expression pattern, it will be replaced (thus adding another set of 'A') upon every iteration.

    Try a test case using something like this, instead:

            replacement = match.Value.Replace("Q", "A")
    

    The details here don't matter (you can change whatever you want), the point is that you change something so that your strings aren't matched repeatedly.