我正在编写一个C#代码,用于读取网页并从网页上查看内容。 我花了很多时间来计算内容,现在我坚持这个:
<i class="icon"></i><a href="https://www.nytimes.com/2017/09/12/us/irma-storm-updates.html">Latest Updates: 90 Percent of Houses in Florida Keys Are Damaged
我想获得&#34;最新更新:佛罗里达群岛90%的房屋被损坏&#34;只要 我曾经使用&#34;(?&lt; = \&#34;&gt;)(。*)&#34;成功获取一些内容但不适合所有内容。 因此,我怎么能使用R.E.要点我想要在最后一个之后开始获取的元素。 &GT; &#39;
谢谢。
答案 0 :(得分:0)
这是你需要的正则表达式,是RegexStorm.net example中的一个工作示例:
>([^<>]+)
这样说:查找与结束尖括号匹配的字符串,后跟不包含尖括号的文本。 [^&lt;&gt;]表示查找不是打开/关闭尖括号的字母,数字,空格。 [^&lt;&gt;]周围的括号将文本捕获为单独的组。 (+)表示至少得到一个或多个。
这是一个使用它的C#示例。您需要获取所需文本的第二个捕获组。
void Main()
{
string text = "<i class=\"icon\"></i><a href=\"https://www.nytimes.com/2017/09/12/us/irma-storm-updates.html\">Latest Updates: 90 Percent of Houses in Florida Keys Are Damaged";
Regex regex = new Regex(">([^<>]+)");
MatchCollection matchCollection = regex.Matches(text);
if (matchCollection != null)
{
foreach (Match m in matchCollection)
{
Console.WriteLine(m.Groups[1].Value);
}
}
}
RegexStorm.net是一个很好的.Net测试网站。 Regex101.com是一个学习不同正则表达式工具的好网站。
答案 1 :(得分:0)
如果要匹配的子字符串出现在最后一个>
之后,那么您知道的主要内容是不包含>
。这与[^>]
匹配。如果字符串必须包含至少一个字符,那么您将要使用+
作为量词;如果它被允许为空,那么你将需要使用*
来允许零匹配。最后,您需要匹配文本的整个剩余部分,直到行的结尾,使用$
。
所以完整表达式为[^>]*$
(如果长度不能为零,则为[^>]+$
。)
如果您还要求前面的文本 具有>
,您可以使用不匹配的后视,{{1 }}。这表示要查找(?<=\>)
(需要使用>
转义此处),但不要在匹配中包含它。最后的表达式将是\>
。现在,C#字符串也使用(?<=\>)[^>]*$
进行转义,因此在将其传递给\
构造函数之前必须将其转义两次。所以它变成了Regex
。
更简单的版本new Regex("(?<=\\>)[^>]*$")
可能足以满足您的需求。
最后,我想补充说,使用正则表达式解析XML或HTML通常是错误的,因为有很多边缘情况,你必须对格式做出假设。例如,根据您的示例文本,我假设您正在搜索输入文本的末尾。通常使用XML解析器解析XML通常会更好,因为XML解析器不会出现这些问题。