【问题标题】:Remove filepaths from a text从文本中删除文件路径
【发布时间】:2012-10-13 18:00:16
【问题描述】:

我有一个长文本,其中包含一些文件的路径。

我想要做的是从中删除路径。 文件路径都是这样的:

some text 1
/all/extraItems/Java/.Scripts/.Sample1.js
some text 2
/all/extraItems/Android/.Scripts/.Sample2.js
some text 3

我知道使用 "^/all" 会选择一个以 /all 开头的句子,以及以 .js$ 结尾的句子.js。但我无法将它们合并在一起以选择整个文件路径。

所有的正则表达式都应该放在下面的代码上以删除路径。

text.replaceAll(<RegularExpression> , "");

我可以为谁编写正则表达式?有什么工具吗?

【问题讨论】:

    标签: java android regex parsing


    【解决方案1】:

    如果你想“合并”它们,你还必须匹配它们之间的字符:

    ^/all.*?\.js$
    

    . 匹配任何字符,* 重复前一个字符 0 次或多次,? 使重复不贪婪,避免匹配超过多行。由于您使用的是 Java,因此您需要在字符串中再次转义反斜杠:

    "^/all.*?\\.js$"
    

    如果您还没有使用多行选项(您实际上需要这样做,以便^/all 和js$ 处理您的输入),您可以这样做:

    "(?m)^/all.*?\\.js$"
    

    【讨论】:

    • 这对我修复它没有帮助;)...会发生什么?
    • 我什至在 Notepad++ 上尝试过,但什么也没选择。 ^/all 单独工作。
    • @mammadalius,在记事本++中对我来说很好用。确保您拥有最新版本(Notepad++ 6),以前的正则表达式引擎有一些问题。要在 Java 中使用正则表达式,您需要将 ` (sorry, I should have mentioned that), and as Fake.It.Til.U.Make.It mentioned, you need to activate multiline mode, but from your two working examples, I thought you had already done that (otherwise ^/all 加倍,而 js$ 也不起作用)。我更新了我的答案,看看!
    【解决方案2】:

    使用.*? 将它们合并在一起

    ^/all.*?\.js$
    

    所以,regex 表示匹配 0 到 n 个字符,即 .*?,它以 all 开头并以 \.js.. 你需要转义 .,因为 . 表示匹配任何字符...

    别忘了使用多行选项

    【讨论】:

    • @mammadalius 多行选项匹配\n..更多信息here
    • 我只是添加了另一个反斜杠以避免编译器错误 "^/all.*?\\.js$" 但没有从我的文本中删除
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-04
    相关资源
    最近更新 更多