如何获取在最后一个>之后开始的字符串通过正则表达式?

时间:2017-09-12 17:53:43

标签: regex

我正在编写一个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;

谢谢。

2 个答案:

答案 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解析器不会出现这些问题。