【问题标题】:regular expression to match string upto the last occurrence of “/”正则表达式匹配字符串直到最后一次出现“/”
【发布时间】:2013-08-03 09:42:08
【问题描述】:

我想知道是否有人知道如何形成一个正则表达式来帮助匹配 utp 最后一次出现的斜线文件路径,例如:

fred/george/simpson/kill 应该得到结果 --> fred/george/simpson/

abc/def/ghi/..v/file.jpg 应该得到结果 --> abc/def/ghi/..v/

任何建议将不胜感激。

感谢您的答复实际上我想重新构建问题,我不确定我是否应该将其作为一个新线程开始......我实际上需要匹配正则表达式中两个“/”之间的所有内容,例如:tom/ jack/sam/jill/ ---> 我需要匹配 jill

在这种情况下还需要匹配 tom/jack/sam(没有最后一个'/')

感谢您的想法!

【问题讨论】:

    标签: ruby regex


    【解决方案1】:

    你可以在这里使用File.dirname

    > File.dirname("fred/george/simpson/kill")
    => "fred/george/simpson"
    > File.dirname("abc/def/ghi/..v/file.jpg")
    => "abc/def/ghi/..v"
    

    如果需要,您可以在尾部添加斜杠。

    【讨论】:

    • 对不起,我没有提到我在具有平面文件结构的 aws 上使用它....所以我不能使用 File 方法....还有什么意见吗?谢谢
    • 许多File 方法(例如这个)对字符串而不是文件进行操作。这适用于 S3。
    【解决方案2】:

    您可能应该在没有正则表达式的情况下这样做。只需找到最右边的/ 并从那里切片。

    file = 'fred/george/simpson/kill'
    last_slash = file.rindex('/')
    parent_file = file[0..last_slash] if last_slash
    
    =>fred/george/simpson/
    

    【讨论】:

      【解决方案3】:

      使用[^\/]*$ 作为模式:

      'fred/george/simpson/kill'.sub(/[^\/]*$/, '') => "fred/george/simpson/"
      'abc/def/ghi/..v/file.jpg'.sub(/[^\/]*$/, '') => "abc/def/ghi/..v/"
      

      【讨论】:

        【解决方案4】:

        试试这个正则表达式:

        ((?<=/).[^/]*?)$
        

        并且repcae与''匹配;

        【讨论】:

          【解决方案5】:

          正则表达式并不适合所有人。 Rob Pike warns of them with reason.

          (.*\/).*\/$
          

          话虽如此,上述(未经测试!)将匹配您在捕获组 1 中想要的内容。

          让我提醒您:最好仔细思考为什么要使用捕获组,即使您不了解它们。 bsd的答案​​显然更好。

          【讨论】:

            猜你喜欢
            • 2012-11-17
            • 1970-01-01
            • 2018-06-14
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多