C# 超链接不匹配的复杂正则表达式问题&引用;
我正在用C#中的超链接替换文本。这里的问题是链接有一个问号 案例1:没问题 输入:ASAss123 输出: 案例2:这里的问题 输入: 输出:ASASSQ123“>ASASSQ123 (注意:ASAss123的第一个出现是hyperlink,替换为C# 超链接不匹配的复杂正则表达式问题&引用;,c#,.net,regex,C#,.net,Regex,我正在用C#中的超链接替换文本。这里的问题是链接有一个问号 案例1:没问题 输入:ASAss123 输出: 案例2:这里的问题 输入: 输出:ASASSQ123“>ASASSQ123 (注意:ASAss123的第一个出现是hyperlink,替换为http://stack.com/temp/test?order=sam&identifier= 如何纠正此问题。此处代码供您参考: mailItem.HTMLBody = Regex.Replace( mailItem.HTMLBody,
http://stack.com/temp/test?order=sam&identifier=
如何纠正此问题。此处代码供您参考:
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>");
mailItem.HTMLBody=Regex.Replace(
mailItem.HTMLBody,
"(?)",
"");
这里的问题是第二个参数中的“?”。如果我在第二个和第三个参数中都去掉“?”,这就很好了
但我无法摆脱“?”,因为URL需要它才能正常工作。我如何解决这个问题
我用\?尝试了转义序列,C sharp说转义序列无法识别…看起来你需要像测试那样转义测试\
,所以这并不意味着可选的不是你需要这样转义:
\\?
您要在正则表达式中转义?但\还需要在c字符串中转义。c\35;无法识别序列\?
,因为它是正则表达式,而不是c\35;字符串
为了防止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>");
mailItem.HTMLBody=Regex.Replace(
mailItem.HTMLBody,
@"(?)",
"");
很抱歉,这一点不太清楚。请提供一个导致您出现问题的示例链接。请提供URL。请将鼠标悬停在超链接上,您将看到示例的相应链接。不…我想要首选输出。我尝试了此C sharp,但它不允许这样做。它显示Escape Sequence UnderAzED.考虑使用<代码> @“测试>”/>代码>语法,而不是<代码>“测试\”语法…用表达式更容易。它应该工作,但是这个解决方案有一个很大的缺点:它将C逃逸序列和ReGEX转义序列全部混合在一个字符串中(在这种情况下:C逃逸序列产生正则表达式,哇!)。正则表达式本身已经非常复杂,因此此解决方案虽然正确,但可能会增加混乱,降低可读性和可维护性。这是一个有趣的观察结果!@SSITRA,那么您将如何使用正则表达式来避免此问题?这就是正则表达式。@fiver我将保持Thinkcool的正则表达式不变,并且以“@”作为前缀,让C#编译器知道,如果字符串中存在转义序列,它不应该关心这些序列。请参阅我自己的答案(这不是正确的答案,唉,反正你赢了!)