在网页范围内提取文本
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
【讨论】:
以上是关于在网页范围内提取文本的主要内容,如果未能解决你的问题,请参考以下文章