众所周知,正如你所看到的那样,正则表达式模式会让你的肚子转动(或者你从未先过头并且真正学会了它的第10次。吵架。)。我正在阅读它,但由于我的时间紧迫,我会在这里查看是否可以获得更快更好的答案/解释。
我有一个论坛帖子的网址,我想浏览html并找到该帖子的最后一页。
所以说我有以下网址之一来识别相关话题:
我希望在html文档中的任何上述“部分”匹配之后获得直接出现的所有值(整数)(下一个路径)。
因此,来自html文档中任何位置的以下任何href (文档表示为单个字符串):
我想提取数字34(只有34),所以我可以将它解析为int。
修改
好的,为了简单起见:
假设我拥有htmlString
中的所有html,并且在此字符串中我想找到在我的inputString {{1}之后出现的所有数字 x }。
这些都出现在/forum/thread-93912
中,我想提取数字:
答案 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];