c#正则表达式-命名组后的匹配选项

c#正则表达式-命名组后的匹配选项,c#,regex,C#,Regex,我相信这已经有很多次了,但尽管我已经检查了所有类似的问题,我还是没有找到解决办法 问题是我的输入URL类似于 我想匹配它的slug部分(在上面的例子中,它是tapechay) 到目前为止我试过的正则表达式是 http://.*\.justin\.tv/(?<Slug>.*)(?:#.)? http://.*\.justin\.tv/(?<Slug>.*)(?:#.) http://.\.justin\.tv/(?*)(?:#)? http://.\.justi

我相信这已经有很多次了,但尽管我已经检查了所有类似的问题,我还是没有找到解决办法

问题是我的输入URL类似于

  • 我想匹配它的slug部分(在上面的例子中,它是tapechay)

    到目前为止我试过的正则表达式是

     http://.*\.justin\.tv/(?<Slug>.*)(?:#.)?
     http://.*\.justin\.tv/(?<Slug>.*)(?:#.)
    
    http://.\.justin\.tv/(?*)(?:#)?
    http://.\.justin\.tv/(?*)(?:#)
    
    但我不能想出一个解决办法。要么在第一个url中失败,要么在其他url中失败


    感谢您的帮助。

    解析Uri的最简单方法是使用类:

    如果你不在正则表达式上,你可以尝试一些更具体的方法:

    Match mate = Regex.Match(str, @"http://(\w+\.)*justin\.tv(?:/(?<Slug>[^#]*))?");
    
    Match mate=Regex.Match(str,@“http://(\w+\)*justin\.tv(?:/(?[^#]*))?”;
    
    • (\w+\)*
      -确保匹配域,而不是字符串中的任何其他位置(例如,哈希或查询字符串)
    • (?:/(?[^#]*)?
      -可选组,包含所需字符串<代码>[^#]限制了您希望在slug中看到的字符,因此它应该消除了在它之后额外的组的需要

      • 解析Uri的最简单方法是使用类:

        如果你不在正则表达式上,你可以尝试一些更具体的方法:

        Match mate = Regex.Match(str, @"http://(\w+\.)*justin\.tv(?:/(?<Slug>[^#]*))?");
        
        Match mate=Regex.Match(str,@“http://(\w+\)*justin\.tv(?:/(?[^#]*))?”;
        
        • (\w+\)*
          -确保匹配域,而不是字符串中的任何其他位置(例如,哈希或查询字符串)
        • (?:/(?[^#]*)?
          -可选组,包含所需字符串<代码>[^#]限制了您希望在slug中看到的字符,因此它应该消除了在它之后额外的组的需要
        http://.\.justin\.tv/(?*)#*?
        

        http://.\.justin\.tv/(?*)(#|$)
        
        http://.\.justin\.tv/(?*)#*?
        

        http://.\.justin\.tv/(?*)(#|$)
        
        在我看来,没有理由对“slug”之后的零件进行处理

        因此,您只需要匹配主机后面不是“/”或“#”的所有字符


        http://.\.justin\.tv/(?[^/#]+)
        在我看来,没有理由对“slug”后面的部分进行处理

        因此,您只需要匹配主机后面不是“/”或“#”的所有字符


        http://.\.justin\.tv/(?[^/#]+)

        感谢这一点,这实际上是一种解决问题的方法,但在我的情况下,我必须用正则表达式实现这一点——因为我有更多的URL需要解析,而我无法用uri段解析它们。事实上,你拥有的越多,正则表达式就越复杂。除非您正在进行URL重写(有时仅限于正则表达式),否则这应该是更好的选择。这也将处理棘手的URL,如
        http://www.justin.tv /warandhate?source=justin.tv/pachetajay
        ,当前在正则表达式中失败。不管怎样,我已经添加了一个regex替代方法。感谢regex方法。实际上,我的URL是一个fore-livestream,一个用于ustream等等。因此每个都有特定的正则表达式要处理。感谢这一点,这实际上是一种解决问题的方法,但在我的情况下,我必须用正则表达式实现这一点——因为我有更多的URL要解析,而我无法用uri段解析它们。实际上,你拥有的越多,正则表达式就越复杂。除非您正在进行URL重写(有时仅限于正则表达式),否则这应该是更好的选择。这也将处理棘手的URL,如
        http://www.justin.tv /warandhate?source=justin.tv/pachetajay
        ,当前在正则表达式中失败。不管怎样,我已经添加了一个regex替代方法。感谢regex方法。实际上,我的URL是一个fore-livestream,一个用于ustream等等。因此,每个都将有特定的正则表达式进行处理。
        http://.*\.justin\.tv/(?<Slug>.*)#*?
        
        http://.*\.justin\.tv/(?<Slug>.*)(#|$)