【问题标题】:Regex for converting file path to package/namespace用于将文件路径转换为包/命名空间的正则表达式
【发布时间】:2013-04-18 06:41:42
【问题描述】:

给定以下文件路径:

/Users/Lawrence/MyProject/some/very/interesting/Code.scala

我想使用 single 正则表达式替换生成以下内容(根可以是常量):

some.very.interesting

这是为了为 Sublime Text 生成一个 sn-p,它可以为我的 scala/java 类自动插入正确的包/命名空间标头:)

Sublime Text 对其正则表达式替换模式(又名“替换”)使用以下语法:

{input/regex/replace/flags}

因此为什么不能采用迭代方法 - 必须一次性完成!此外,替换不能嵌套:(

【问题讨论】:

    标签: regex sublimetext2 sublimetext sublimetext3


    【解决方案1】:

    如果您知道嵌套文件夹的最大数量。您可以在您的正则表达式中指定。


    对于 1 到 3 个嵌套文件夹

    正则表达式:/Users/Lawrence/MyProject/(\w+)/?(\w+)?/?(\w+)?/[^/]+$

    替换:$1.$2.$3


    对于 1 到 5 个嵌套文件夹

    正则表达式:/Users/Lawrence/MyProject/(\w+)/?(\w+)?/?(\w+)?/?(\w+)?/?(\w+)?/[^/]+$

    替换:$1.$2.$3.$4.$5


    鉴于限制,这是您唯一可以做的事情

    【讨论】:

    • 谢谢你 Sieg - 我需要比我自己对正则表达式更有信心的人来确认这一点!
    • 这似乎只适用于固定数量的文件夹。即第一个适用于精确的 3 个文件夹,后者适用于精确的 5 个文件夹。即使它经过调整使其实际上匹配(至少在我的工具中不匹配),那么替换引入的额外句点 (.) 呢?
    • @LawrenceWagerfield 哎呀,看看编辑。现在它适用于 1 到 3 个嵌套文件夹
    • 感谢 Anirudh,尽管对于文件夹数量少于最大值的路径,这仍会在输出中产生多余的句点 (.)。
    【解决方案2】:

    输入

    /Users/Lawrence/MyProject/some/very/interesting/Code.scala
    

    正则表达式

    ^/Users/Lawrence/MyProject/[^/]+/[^/]+/[^/]+/Code.scala
    

    ^/[^/]+/[^/]+/[^/]+/([^/]+)/([^/]+)/([^/]+)/
    

    替换

    \1.\2.\3
    

    更新

    这让你更接近,但不完全是:

    正则表达式

    (^/Users/Lawrence/MyProject/|/Code\.scala$|/)
    

    替换

    .
    

    输出将是:

    .some.very.interesting.
    

    如果在一行中没有多个替换,也没有递归反向引用,这将很困难。

    您可能需要进行第二次替换,将类似这样的内容替换为空字符串(如果可以的话):

     (^\.|\.$)
    

    【讨论】:

    • 与 Sieg 的回答相同的问题:这似乎只适用于固定数量的文件夹。即第一个适用于精确的 3 个文件夹,后者适用于精确的 5 个文件夹。即使它经过调整使其实际上匹配(至少在我的工具中不匹配),那么替换引入的额外句点 (.) 呢?
    猜你喜欢
    • 2019-10-03
    • 2013-07-05
    • 1970-01-01
    • 2021-10-16
    • 2012-03-10
    • 1970-01-01
    • 1970-01-01
    • 2019-04-09
    • 2018-12-07
    相关资源
    最近更新 更多