代码之家  ›  专栏  ›  技术社区  ›  niki b

regex网站只有一个子文件夹

  •  1
  • niki b  · 技术社区  · 6 年前

    有谁能帮我纠正正则表达式的模式吗? 基本上,我想捕获所有只有一个子文件夹而后面没有其他子文件夹的字符串(除了一个正斜杠)。

    这是我的正则表达式,但不匹配所有内容:

    Regex Pattern: http(s)?:\/\/(.*).(.*)/(\w-)*\b
    

    要匹配的字符串(我要匹配的是箭头):

        http://test.org/
    ==> http://test.org/SubFolder1             
        http://test.org/SubFolder1?Query=Test
        http://test.org/SubFolder1/SubFolder2
        http://test.org/SubFolder1/SubFolder2?Query=Test
        http://www.test.org/
    ==> http://www.test.org/SubFolder1  
        http://www.test.org/SubFolder1?Query=Test
        http://www.org/SubFolder1/SubFolder2
        http://www.org/SubFolder1/SubFolder2?Query=Test
        www.test.org/
    ==> www.test.org/SubFolder1  
        www.test.org/SubFolder1?Query=Test
        www.org/SubFolder1/SubFolder2
        www.org/SubFolder1/SubFolder2?Query=Test
    

    提前谢谢。

    2 回复  |  直到 6 年前
        1
  •  1
  •   TheSoftwareJedi jac    6 年前

    使用regexr我可以解决一些问题。很多时候,你将无法谷歌你的确切解决方案,所以你应该花一些时间试图了解如何编写正则表达式为您的独特需求。

    (https?:\/\/)?\w+\.+[\w\.]*\/[\w-]+$
    
    • 可选https
    • 一个或多个字母
    • 一个或多个点
    • 任意数量的字母或点
    • 一条斜线(我逃过这里,你没有逃走——有时需要它)
    • 一个或多个字母或连字符(连字符在您的中)
    • 行尾

    我创建了一个regexr here 它以非常图形化的方式解释了解决方案。

        2
  •  1
  •   maccettura    6 年前

    不用regex,只需使用内置的 Uri UriBuilder 类(ES):

    首先创建一个方法来确定输入字符串是否匹配:

    public static bool IsMatch(string url)
    {
        Uri uri = new UriBuilder(url).Uri;
        return uri.Segments.Length == 2 && string.IsNullOrWhiteSpace(uri.Query);
    }
    

    然后您可以使用linq过滤列表:

    var matchedUrls = urls.Where(IsMatch);
    

    小提琴 here