在网页范围内提取文本

Posted

技术标签:

【中文标题】在网页范围内提取文本【英文标题】:Extract text inside within span of webpage 【发布时间】:2019-06-25 01:07:06 【问题描述】:

我正在尝试从网站中提取交货状态,以便我可以在 asp gridview 中实时显示此状态。

我正在尝试通过正则表达式执行此操作,但是在尝试设置字符串值时我遇到了问题。

这是 html 的原始格式:

<span class=" palette-confirm "> Delivered </span>

(<span class=")\s+(palette-confirm)(\n|\r)(">)(\n|\r)\s+

我在 regex101 中提出了上述内容,但是当我尝试在 Visual Studio 的字符串中使用它时,语法不正确。

string pattern = "(<span class=\")\s+(palette-confirm)(\n |\r)(\">)(\n|\r)\s+\";

我不确定如何取出最后一个标签,所以我只提取“已交付”文本。

【问题讨论】:

html 的原始格式为:已交付 【参考方案1】:

在 C# 中,反斜杠被视为转义字符。为了保留正则表达式的反斜杠,您需要编写双反斜杠"()(\\n|\\r)\\s+\\" 或通过在字符串前面放置@ 符号来告诉C# 不要将反斜杠视为转义字符:@"()(\n|\r)\s+\"

【讨论】:

好的,非常感谢您解决这个问题。如果字符串中也有引号怎么办?是同一个转义字符吗? 在这种情况下,您将使用反斜杠作为转义字符(因此前面没有 @),例如"\"test\"".【参考方案2】:

有多少种状态?只需通过 or 的 |.....

匹配实际状态文本
 \>\s*(Delivered | In\sProcess)\s*\<

这是一个例子:

var pattern = @"\>\s*(Delivered | In\sProcess)\s*\<";

var str = @"<span class="" palette-confirm ""> In Process</span?";

var result = Regex.Match(str, pattern );

Console.WriteLine(result.Groups[1].Value);

输出

In Process

【讨论】:

以上是关于在网页范围内提取文本的主要内容,如果未能解决你的问题,请参考以下文章

利用shell编程,提取注释文件中指定范围内的行

使用 awk getline bash 在指定的时间范围内从日志文件中提取数据

arcgis中如何保留范围内的点

在excel 2013中自动填充范围内的特定文本

如何在指定的时间范围内打印从日志文件中提取的行?

For Loop 在不同的范围内