我试图在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
可能是什么问题?
答案 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代码也没有得到你的结果(你在第一次回复后没有编辑原文?)