使用regex删除Java子字符串

时间:2017-04-20 18:33:19

标签: java regex

我正在尝试删除/#字符之间的字符,我的字符串是以下字符:

platform:/this/is/a/path/contentToRemove#OtherContent

我执行的替换是:

aString.replaceAll("/.*?#", "#")

但我得到的回报是:

platform:#OtherContent

我想要的时候:

platform:/this/is/a/path/#OtherContent

如何使用正则表达式正确完成此操作?还有其他解决办法可以实现我想要的吗?

感谢。

5 个答案:

答案 0 :(得分:2)

那是因为你使用了贪婪模式。它将从第一次出现/到最终模式吃掉。你必须使用:

aString.replaceAll("(.*/).*?#", "$1#");

这将获取最后/和组($1)之前的所有内容,并将其替换为第1组和#

的内容

答案 1 :(得分:1)

使用否定字符类:

aString = aString.replaceAll("/[^/#]*#", "/#");
//=> platform:/this/is/a/path/#OtherContent

[^/#]*是一个否定的字符类,它会找到0个或更多不是/#

的字符

RegEx Demo

答案 2 :(得分:0)

aString.replaceAll("[^/]+#", "#");

Demo and Explanation

答案 3 :(得分:0)

这应该有效aString.replaceAll("/[^/]*#", "#")

上述正则表达式与斜杠/和任意数量的非[^/]字符匹配,后跟哈希#

答案 4 :(得分:0)

aString.replaceAll("(.*/).*#(.*)", "$1#$2");  

这将捕获所有字符串直到最后/并将该字符串放在组1中,然后它将查找#,后面的字符串将被放入组2