C#中的条件正则表达式问题

时间:2011-07-08 16:02:34

标签: c# regex visual-studio conditional complexity-theory

我想匹配模式ASA [az] [az] [0-9] [0-9]并用嵌入的超链接替换它们http://www.stack.com?order=ASA[az][az ] [0-9] [0-9]并显示为ASA [az] [az] [0-9] [0-9]

例如:ASAsq96ASApt66

在更换之前应满足以下条件

1.如果模式出现在任何href链接中,则不应替换该模式

<ahref="samplesample?=ASAsq96\%#');"</a>

2.如果模式出现在任何 http:// 链接中,则不应替换该模式

http://www.test.com/ASA[a-z][a-z][0-9][0-9]/example

http://www.stack.com/ASA[a-z][a-z][0-9][0-9]

3.但是,如果模式仅存在于

类型的特定超链接中,则应替换该模式
 http://replaceme/ASA[a-z][a-z][0-9][0-9] 

4.应更换外部所有其他现有模式

这里的正则表达式完全满足条件2和4 。如何将条件1和3合并到此正则表达式中。我正在使用HTML body来处理正文。

mail.HTMLBody = Regex.Replace(mail.HTMLBody, 
"(?<!http://([\\w+?\\.\\w+])+([a-zA-Z0-9\\~\\!\\@\\#\\$\\%\\^\\&amp;
\\*\\(\\)_\\-\\=\\+\\\\\\/\\?\\.\\:\\;\\'\\,]*)?)
(ASA[a-z][a-z][0-9][0-9])(?!</a>)", 
"<a href=\"http://www.stack.com?order=$&\">$&</a>");

1 个答案:

答案 0 :(得分:0)

有没有充分的理由说明为什么要将一堆不同的条件组合成一个正则表达式?我为每个条件都有一个单独的表达式。这将使您的模式(和逻辑)更具可读性。