【发布时间】:2017-08-21 08:45:15
【问题描述】:
正则表达式新手,我想在我的 HTML 中包含以下文本,并想用其他内容替换
示例 HTML:
{{Object id='foo'}}
将 id 提取到这样的变量中:
string strId = "foo";
到目前为止,我有以下将捕获示例 HTML 的正则表达式代码:
string strStart = "Object";
string strFind = "{{(" + strStart + ".*?)}}";
Regex regExp = new Regex(strFind, RegexOptions.IgnoreCase);
Match matchRegExp = regExp.Match(html);
while (matchRegExp.Success)
{
//At this point, I have this variable:
//{{Object id='foo'}}
//I can find the id='foo' (see below)
//but not sure how to extract 'foo' and use it
string strFindInner = "id='(.*?)'"; //"{{Slider";
Regex regExpInner = new Regex(strFindInner, RegexOptions.IgnoreCase);
Match matchRegExpInner = regExpInner.Match(matchRegExp.Value.ToString());
//Do something with 'foo'
matchRegExp = matchRegExp.NextMatch();
}
我知道这可能是一个简单的解决方案,我希望获得更多关于正则表达式的知识,但更重要的是,我希望收到有关如何更清洁、更有效地处理这个问题的建议。
谢谢
编辑:
这是我可能使用的示例吗:c# regex replace
【问题讨论】:
-
停下!一边看一边听!每天都有人醒来时想到了用正则表达式解析 Html 的好主意。没有什么比 Xml 解析器更好的解析 Html 了。虽然您提出问题的方式可能会掩盖问题的难度!使用
{{而不是<>可以隐藏这样一个事实,即解析像 ">_ _o/" 这样的评论会使你的正则表达式变成一场噩梦。在你的头脑中,正则表达式是一个简单的“寻找这个”它不是!要解析 html 正则表达式,每次都必须重复并回到开头。使用解析器,您的代码将像在 js 中一样简单。 -
谢谢您,我重视您的意见,RegEx 似乎是一种简单的方法,但似乎并非如此。我试图进入
SubString和IndexOf,因为我正在尝试做类似于 WordPress 的 doShortCode() 完成的事情,并且能够找到有关当前工作方式的文档。我希望获得概念验证并从那里继续前进。 -
使用 Html 解析器作为 Html Agility Pack (HAP)。一个简单的 nuget 和 bim,你可以在 html 中选择任何你想要的东西。学习并不难,几乎没有什么可学的。
-
要获得概念证明,请使用一些关键字和 Google 搜索,不要将此问题置于站点外资源列表中。每个解析 html 的库在主页上都有强大的示例。而且解析 html 是如此普遍,你可以在任何地方找到 freelib。
-
有趣的是,每个人都建议使用 HTML 敏捷包……然而在 StackOverflow 上的 10 年里,我只看到一个人在正则表达式问题上用它回答问题。所以你的里程可能会有所不同。