Regex 动态正则表达式查找和替换模式

Regex 动态正则表达式查找和替换模式,regex,notepad++,Regex,Notepad++,我的目标是扭转这种局面: src/com/company/folder/anotherfolder/manyfolders/filename.java 为此: a few words com.company.folder.anotherfolder.manyfolders filename "description" 我主要使用以下查找和替换功能: 查找:(.*)/(.*)/(.*)/(.*)/(.*)/(.*)/(.*)/(.*)/(.*)/(.*)/(.*)/(.*)/(.*)(\..*

我的目标是扭转这种局面:

src/com/company/folder/anotherfolder/manyfolders/filename.java
为此:

a few words com.company.folder.anotherfolder.manyfolders filename "description"
我主要使用以下查找和替换功能:

查找:
(.*)/(.*)/(.*)/(.*)/(.*)/(.*)/(.*)/(.*)/(.*)/(.*)/(.*)/(.*)/(.*)(\..*)

替换:
几个词$2\.$3\.$4\.$5\.$6\.$7\.$8\040$9\040“说明”

这很好,但我可能有不同数量的文件夹,所以在这种情况下它不会工作


如何使其适用于任意数量的文件夹?

您需要重复使用
/
字符-您是否尝试过以下方法:

((.*)/)(.*)

考虑在一行中使用几个正则表达式:

  • 转换斜杠

    /
    
    =>

  • 把其余的换成

    ([a-zA-Z0-9\.]+)\.(\w+)\.java
    
    =>


  • 您在这里执行两个不同的过程:

  • 将所有
    /
    替换为
  • 在替换结果之前和之后添加文本以及其他一些小更改
  • 这在单个正则表达式中是不可能的,如果您仍然想使用notepad++的find/replace函数来完成,则需要进行两次替换。我建议以下列方式取代:

  • /
    替换为
    (此处不需要正则表达式,但如果有
    /
    您不想替换,那么它会变得更复杂,您可能需要使用类似于
    (?:(?!^)\G|)\K/(?=[^.\r\n]*\)
    的正则表达式进行查找,并使用
    进行替换)

  • 正则表达式替换

    [^.\r\n]+\.((?:[^.\r\n]+\.)+[^.\r\n]+)\.([^.\r\n]+)\.[^.\r\n]+
    
    并替换为

    a few words $1 $2 "description"
    

  • 我使用这个正则表达式的前提是文件夹和文件名可以包含空格并占据一整行。

    如果只是一个正则表达式查找和替换会更适合我,是不是没有办法将我们的两个正则表达式结合起来,因为我的正则表达式只需一步,而你的正则表达式则需要动态查找和替换,对不起。Regex功能强大,但它没有那种功能——在一个表达式中进行多种不同类型的替换。
    [^.\r\n]+\.((?:[^.\r\n]+\.)+[^.\r\n]+)\.([^.\r\n]+)\.[^.\r\n]+
    
    a few words $1 $2 "description"