C# 正则表达式提取特定HTML标记中的纯文本
在这种情况下,我应该只使用一个正则表达式匹配。C# 正则表达式提取特定HTML标记中的纯文本,c#,.net,regex,C#,.net,Regex,在这种情况下,我应该只使用一个正则表达式匹配。 请参阅以下HTML代码: <html> <body> <p>This is some <strong>strong</strong> text</p> </body> </html> 这是一些strong文本 我想制作一个可以返回的正则表达式,这是一些强文本。在本例中,标记内的文本 总的来说,它应该: 仅匹配两个HTML标记之间的
请参阅以下HTML代码:
<html>
<body>
<p>This is some <strong>strong</strong> text</p>
</body>
</html>
这是一些strong文本
我想制作一个可以返回的正则表达式,这是一些强文本。在本例中,
标记内的文本
总的来说,它应该:
- 仅匹配两个HTML标记之间的文本
- 排除两个标记中的HTML标记,但将文本保留在这些标记中李>
到目前为止,我知道:
(.*)
将匹配从
到
]*>
将匹配任何HTML标记
对我来说,最困难的部分是如何将两者结合起来(也许有更好的方法)。
你将如何编写这样的正则表达式?真正的软件工程师如何解决这个问题:为正确的工作使用正确的工具,即不要使用正则表达式解析HTML
最直接的方法是使用HTML解析库,因为用正则表达式解析即使是完全一致的XML也是非常不容易的,处理所有HTML边缘情况是一项非常困难的任务
如果您的要求是“必须使用正则表达式库从
元素中提取innerHTML”,我更愿意将其分为两个任务:
1) 使用regex提取容器元素及其innerHTML。(我展示了一个仅适用于获取已知标记的最外层元素的示例。要提取任意嵌套项,必须使用一些技巧,如匹配平衡表达式)
2) 使用简单的Regex.Replace删除所有标记内容
let html = @"<p>This is some <strong>strong</strong> text</p>
<p>This is some <b><em>really<strong>strong</strong><em></b> text</p>"
for m in Regex.Matches(html, @"<p>(.*?)</p>") do
printfn "(%O)" (Regex.Replace(m.Groups.[1].Value, "<.*?>", ""))
(This is some strong text)
(This is some reallystrong text)
请记住,上述两个示例在格式错误的HTML上或在@Jimmy的回答之后相同标记嵌套在itsel中的情况下都不太适用,在关于如何“提取”文本的文章标题中,我想我应该包括Regex.Replace的C代码
这段代码可以用来提取文本:
string HTML = "<html><body><p>This is some <strong>strong</strong> text</p></body></html>";
Regex Reg = new Regex("<[^>]*>");
String parsedText = Reg.Replace(HTML, "").Trim();
MessageBox.Show(parsedText);
string HTML=“这是一些strongtext”;
正则表达式Reg=新正则表达式(“]*>”);
字符串parsedText=Reg.Replace(HTML,“”.Trim();
MessageBox.Show(解析文本);
显然,这两个标记之间并不完全匹配(它也会捕获段落标记之外的任何内容),但我建议,在只进行一个匹配时,replace函数是最好的选择
如果您只需要获取两个标记之间的内容,我认为您需要按照@Jimmy的建议,在两个表达式中实现这一点
我很想知道是否有人能用一种表达方式表达出来,但我猜这就是他们在你们学校寻找的东西。认真研究HtmlAgilityPack
(通过Nuget免费提供)-它会让你成为一个更快乐的人!也许像HtmlAgilityPack()这样的东西更适合你的需要。在我的学校里,它是作为一项练习任务提供的。这是一个多么糟糕的正则表达式教学例子啊。作为您老师的示例,请添加一个
、一个和一个>>
string HTML = "<html><body><p>This is some <strong>strong</strong> text</p></body></html>";
Regex Reg = new Regex("<[^>]*>");
String parsedText = Reg.Replace(HTML, "").Trim();
MessageBox.Show(parsedText);