我确信这已经很多次,但是虽然我已经检查了所有类似的问题,但我无法提出解决方案。
问题是我的输入网址类似于;
我想匹配它的slug部分(在上面的例子中,它是和平的)。
我到目前为止尝试过的正则表达式是
http://.*\.justin\.tv/(?<Slug>.*)(?:#.)?
http://.*\.justin\.tv/(?<Slug>.*)(?:#.)
但我无法找到解决方案。要么在第一个网址中失败,要么在其他网址中失败。
帮助表示赞赏。
答案 0 :(得分:3)
解析Uri的最简单方法是使用Uri
类:
string justin = "http://www.justin.tv/peacefuljay#/w/778713616/3";
Uri uri = new Uri(justin);
string s1 = uri.LocalPath; // "/peacefuljay"
string s2 = uri.Segments[1]; // "peacefuljay"
如果您对正则表达式不感兴趣,可以尝试更具体一些:
Match mate = Regex.Match(str, @"http://(\w+\.)*justin\.tv(?:/(?<Slug>[^#]*))?");
(\w+\.)*
- 确保您匹配域,而不是字符串中的任何其他位置(例如,哈希或查询字符串)。(?:/(?<Slug>[^#]*))?
- 包含您需要的字符串的可选组。 [^#]
限制了你期望在你的slug中看到的角色,所以它应该消除后面的额外组的需要。答案 1 :(得分:2)
我认为没有理由在“slug”之后对零件进行处理。
因此,您只需要匹配主机之后不是“/”或“#”的所有字符。
http://.*\.justin\.tv/(?<Slug>[^/#]+)
答案 2 :(得分:0)
http://.*\.justin\.tv/(?<Slug>.*)#*?
或
http://.*\.justin\.tv/(?<Slug>.*)(#|$)