String.replace添加额外的字符

时间:2014-11-27 11:28:04

标签: vb.net string outlook-addin

我试图在Outlook中替换邮件中的一些单词。这是我的代码

        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

对于此输入

QWQrt12345
QWQrt1234533

wwQWQrt12345
QWQrt1234534

qwwQWQrt12345

我希望输出为

AQWQrt12345A
AQWQrt12345A33

wwAQWQrt12345A
AQWQrt12345A34

qwwAQWQrt12345A

但我得到的输出是

AAAAAQWQrt12345AAAAA
AAAAAQWQrt12345AAAAA33

wwAAAAAQWQrt12345AAAAA
AAAAAQWQrt12345AAAAA34

qwwAAAAAQWQrt12345AAAAA

可能是什么问题?

2 个答案:

答案 0 :(得分:0)

String.Replace州的描述,

  

返回一个新字符串,其中所有出现的指定字符串都在其中   当前实例将替换为另一个指定的字符串。

重要的是," 所有出现......被替换。"由于您的替换字符串也与正则表达式模式匹配,因此它将被替换(因此在每次迭代时添加另一组' A')。

尝试使用类似这样的测试用例,而不是:

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

此处的详细信息并不重要(您可以更改任何内容),重点是您更改某些内容,以便您的字符串不会重复匹配。

答案 1 :(得分:-1)

只需添加'A'+匹配+'A'即时匹配。

在您输入之前和之后产生AAAAA。我被投了票?

好的,我解释你的第一个匹配输入结果正好是你输入的(所有字符都可以匹配),然后你添加“A”两边,并希望用原始值替换你的替换值。

这是获得预期值的c#代码:

        var input = "QWQrt1234533"; //your second line example
        const string pattern = "QWQ[a-z][a-z][0-9][0-9][0-9][0-9][0-9]";
        var rgx = new Regex(pattern);

        Match match = Regex.Match(input, pattern);
        while (match.Success)
        {
            var replacement= "A" + match.Value + "A";
            input = input.Replace(match.Value, replacement);
            match = match.NextMatch();
        }
        Console.Write(input);

导致您执行:“AQWQrt12345A33”

即使使用发布的VB代码也没有得到你的结果(你在第一次回复后没有编辑原文?)