C# 正则表达式匹配-未按预期工作

C# 正则表达式匹配-未按预期工作,c#,asp.net,regex,C#,Asp.net,Regex,我有一个text/html字符串。我想根据我的正则表达式模式替换字符串的部分,如果它有匹配项的话。 包含32个字符长GUID的href=“…”的模式检查。如果它找到了,我想替换它 我的模式在这里起作用: 但是,当我在我的C#项目中实现相同的模式时,它没有从数据库中找到与相同文本的匹配 public static string UpdateLinks(string bodyText) { string patternLinks = @"((\/~\/link\.aspx\?_id=([A-

我有一个text/html字符串。我想根据我的正则表达式模式替换字符串的部分,如果它有匹配项的话。 包含32个字符长GUID的
href=“…”
的模式检查。如果它找到了,我想替换它

我的模式在这里起作用:

但是,当我在我的C#项目中实现相同的模式时,它没有从数据库中找到与相同文本的匹配

public static string UpdateLinks(string bodyText) {
    string patternLinks = @"((\/~\/link\.aspx\?_id=([A-Z0-9]{32})))";
    bodyText = Regex.Replace(bodyText, patternLinks, "/$3/mylink.aspx");

    return bodyText;
}
如果我使用原始文本字符串,如
@“和

基于上述字符串的预期输出

<p><a href="/994FE46E00D84DE9BF8050948E5496DA/mylink.aspx">Link 1</a> and <a href="/E7BBDF47B8784AA084985A0623490295/mylink.aspx">Link 2</a></p>

使用此模式:

string patternLinks = @"((\/~\/link\.aspx\?_id=([A-Z0-9]{32})[^""]+))";
结果:

<p><a href="/994FE46E00D84DE9BF8050948E5496DA/mylink.aspx">Link 1</a> and <a href="/E7BBDF47B8784AA084985A0623490295/mylink.aspx">Link 2</a></p>>

>
我想你只是忘了在你的模式中添加这个部分--
&;uz=z

 var patternLinks = @"((\/~\/link\.aspx\?_id=([A-Z0-9]{32})&amp;_z=z))";

您正在使用PHP解析器测试正则表达式。您应该使用类似的东西。在这里,您将看到这是一个分组问题。这个表达式在那里对我有效

((\/~\/link\.aspx\?_id=)([A-Z0-9]{32}))
试试下面的正则表达式


(?您的正则表达式中有太多的方括号,这给了您不需要的额外捕获组。只需将它们关闭。如果您想删除32个字符ID之后的内容,您需要将其包括在模式中,但不包括在捕获组中。排除32个字符ID之后的任何内容的最简单方法就是简单地匹配后面的任何内容都不是结束引号,因此,
[^”]*

正则表达式应如下所示:

@"\/~\/link\.aspx\?_id=([A-Z0-9]{32})[^""]*"
移除比赛周围多余的无用支架后,替换者只需使用第一组:

"/$1/mylink.aspx"

你能举一个DB文本的例子吗?@AshkanMobayenKhiabani我更新了我的帖子:-)预期的输出是什么?@RoyiNamir用预期的输出更新了我的帖子。为什么在模式周围有两组额外的()呢?在这种情况下,1美元和2美元都是你的全部匹配。运气不好:-(仍然是相同的结果-没有匹配。我不认为这是一个模式问题,因为该模式似乎有效。但我承认,我不知道发生了什么。@兄弟,你什么意思不起作用?在我的演示中,它起作用了:它找不到匹配。但是,我刚刚意识到。我正在解析的文本,我想替换的,实际上是f。)rom一个XML文件,然后对其进行解析,并保存到数据库中。在检查原始XML文件时,我试图在其上运行上述代码,然后插入数据库中,原始字符串如下所示:a href=“~/link.aspx?_id=e7bbdf47b8784aa084985a062349090295&;_z=z”链接1/a所以,这显然是它失败的地方——但是,在我的正则表达式中,我如何考虑这种编码呢?在使用正则表达式进行消化之前,您应该先进行html解码(阅读相关内容)
@"\/~\/link\.aspx\?_id=([A-Z0-9]{32})[^""]*"
"/$1/mylink.aspx"