我试图在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有什么问题吗?
发布于 2014-11-27 12:38:56
String.Replace状态的描述,
返回一个新字符串,其中当前实例中所有指定字符串的出现都将替换为另一个指定字符串。
重要的是,“所有的事件.都被替换了”。因为替换字符串也与正则表达式模式匹配,因此它将在每次迭代中被替换(从而添加另一组'A')。
尝试使用这样的测试用例,而不是:
replacement = match.Value.Replace("Q", "A")这里的细节并不重要(您可以随意更改),关键是要更改某些内容,这样就不会重复匹配字符串。
发布于 2014-11-27 11:35:31
简单地说,你每次比赛时都要加上“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代码中也没有得到结果(在我第一次响应之后,您没有编辑原版吗?)
https://stackoverflow.com/questions/27169617
复制相似问题