正则表达式匹配html字符串中的动态单词

时间:2013-08-30 14:57:13

标签: c# regex

我有一个html字符串可以使用如下:

string html = new MvcHtmlString(item.html.ToString()).ToHtmlString();

我需要匹配两种不同类型的文本,尽管非常相似。我需要删除初始^^并删除结束|^^。然后,如果有多个客户端,我需要将^分隔客户端更改为逗号(,)。

^^Client One- This text is pretty meaningless for this task, but it will exist in the real document.|^^

^^Client One^Client Two^Client Three- This text is pretty meaningless for this task, but it will exist in the real document.|^^

我需要能够匹配每个客户端并使其变为粗体。

Client One - 此文本对于此任务来说毫无意义,但它将存在于真实文档中。

客户端1 客户端2 客户端3 - 此文本对此任务毫无意义,但它将存在于真实文档中

一个很好的堆栈溢出用户提供了以下内容,但是当我在在线正则表达式测试器上测试时,我无法使其工作或找到任何匹配。

const string pattern = @"\^\^(?<clients>[^-]+)(?<text>-.*)\|\^\^";

    var result = Regex.Replace(html, pattern,
                                m =>
                                {
                                    var clientlist = m.Groups["clients"].Value;
                                    var newClients = string.Join(",", clientlist.Split('^').Select(s => string.Format("<strong>{0}</strong>", s)));

                                    return newClients + m.Groups["text"];
                                });

我是正则表达式的新手,所以感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

我是C#的新手,如果我犯了新手的错误,请原谅我:)

const string pattern = @"\^\^([^-]+)(-[^|]+)\|\^\^";

var temp = Regex.Replace(html, pattern, "<strong>$1</strong>$2");
var result = Regex.Replace(temp, @"\^", "</strong>, <strong>");

我正在使用$1,尽管MSDN对使用该语法引用子组含糊不清。

修改:如果-后的文字可能包含^,则可以执行此操作:

var result = Regex.Replace(temp, @"\^(?=.*-)", "</strong>, <strong>");