我正在使用C#中的超链接替换文本。这里的问题是该链接有问号
案例1:没问题
输入:ASAss123
输出:ASAss123
案例2:问题在这里
输入:ASAsq123
输出: ASAsq123 “> ASAsq123
(注意:首次出现的ASAss123是超链接,被替换为http://stack.com/temp/test?order=sam&identifier=<a href=
,第二次出现的只是纯文本)
首选输出:ASAsq123
我该如何纠正这个问题。这里的代码供您参考:
mailItem.HTMLBody = Regex.Replace(
mailItem.HTMLBody,
"(?<!http://stack.com/temp/test?order=sam&identifier=)ASA[a-z][a-z][0-9][0-9][0-9](?!</a>)",
"<a href=\"http://stack.com/temp/test?order=sam&identifier=$&\">$&</a>");
这里的问题是“?”在第二个参数中找到。如果我摆脱这个“?”在第二和第三个论点中,这完全正常。
但是我无法摆脱“?”,因为URL需要它才能运行。我该如何解决这个问题?
我用\?尝试了转义序列?而C sharp说逃脱序列未被识别......
答案 0 :(得分:4)
您似乎需要逃避test?
test\?
,因此并不意味着选择t
。
答案 1 :(得分:3)
你需要像这样逃跑:
\\?
你正在逃避吗?在正则表达式中,\ _也需要在c#字符串中进行转义。
答案 2 :(得分:2)
C#无法识别序列\?
,因为它是正则表达式而不是C#。
为防止C#尝试识别字符串中的转义序列并使C#像对待任何其他字符一样处理\?
,您必须在字符串前加@
:
mailItem.HTMLBody = Regex.Replace(
mailItem.HTMLBody,
@"(?<!http://stack.com/temp/test?order=sam&identifier=)ASA[a-z][a-z][0-9][0-9][0-9](?!</a>)",
"<a href=\"http://stack.com/temp/test?order=sam&identifier=$&\">$&</a>");