正则表达式:从部分匹配网址中查找页码

时间:2014-11-04 11:05:34

标签: c# regex

众所周知,正如你所看到的那样,正则表达式模式会让你的肚子转动(或者你从未先过头并且真正学会了它的第10次。吵架。)。我正在阅读它,但由于我的时间紧迫,我会在这里查看是否可以获得更快更好的答案/解释。

我有一个论坛帖子的网址,我想浏览html并找到该帖子的最后一页。

所以说我有以下网址之一来识别相关话题:

我希望在html文档中的任何上述“部分”匹配之后获得直接出现的所有值(整数)(下一个路径)。

因此,来自html文档中任何位置的以下任何href (文档表示为单个字符串):

我想提取数字34(只有34),所以我可以将它解析为int。

修改

好的,为了简单起见:

假设我拥有htmlString中的所有html,并且在此字符串中我想找到在我的inputString {{1}之后出现的所有数字 x }。

这些都出现在/forum/thread-93912中,我想提取数字:

  • 线程93912 /的 34
  • 线程93912 /的 14
  • 线程93912 /的 84
  • 线程93912 /的 64
  • 线程93912 /的 4

3 个答案:

答案 0 :(得分:2)

您不需要正则表达式。只需使用System.Uri.Segments

即可
Uri url = new Uri("your url here");
Console.WriteLine(url.Segments[4]);

答案 1 :(得分:1)

\b(\d+)\b(?=[^\d]*$)

试试这个。看看demo.grab捕获。

http://regex101.com/r/sU3fA2/55

使用System; 使用System.Text.RegularExpressions;

class Program
{
    static void Main()
    {
    Regex regex = new Regex(@"\b\d+\b(?=[^\d]*$)");
    Match match = regex.Match("/forum/thread-93912/34");
    if (match.Success)
    {
        Console.WriteLine(match.Value);
    }
    }
}

答案 2 :(得分:0)

由于我的问题有点难以解释(因为我“稍微改变了”我的问题),我想我会添加自己的答案来获取我所使用的确切代码(我来了)感谢这里的其他答案,所以我会给你一个upvote!)。

我确信这可以变得更漂亮,更紧凑,但是因为我刚接触正则表达式,所以我很清楚!

首先,获取与url匹配的所有字符串+某个数字(用斜杠“/”分隔),然后将该数字提取到名为“page”的组中。

Regex regex = new Regex(urlToThread + @"/(?<page>\d+)");
MatchCollection matches = regex.Matches(htmlString);

然后迭代所有匹配并提取“page”-value(保证为整数),并将其解析为整数。将所有已解析的整数添加到列表中并在完成后进行排序。最后一个是最好的(最后一页)。

List<int> pages = new List<int>();
foreach(Match match in matches)
    pages.Add(int.Parse(match.Groups["page"].Value));
pages.Sort();
// And here we get the last page
int nrOfPages = pages[pages.Count-1];