我正在尝试删除/
和#
字符之间的字符,我的字符串是以下字符:
platform:/this/is/a/path/contentToRemove#OtherContent
我执行的替换是:
aString.replaceAll("/.*?#", "#")
但我得到的回报是:
platform:#OtherContent
我想要的时候:
platform:/this/is/a/path/#OtherContent
如何使用正则表达式正确完成此操作?还有其他解决办法可以实现我想要的吗?
感谢。
答案 0 :(得分:2)
那是因为你使用了贪婪模式。它将从第一次出现/
到最终模式吃掉。你必须使用:
aString.replaceAll("(.*/).*?#", "$1#");
这将获取最后/
和组($1
)之前的所有内容,并将其替换为第1组和#
答案 1 :(得分:1)
使用否定字符类:
aString = aString.replaceAll("/[^/#]*#", "/#");
//=> platform:/this/is/a/path/#OtherContent
[^/#]*
是一个否定的字符类,它会找到0个或更多不是/
和#
答案 2 :(得分:0)
aString.replaceAll("[^/]+#", "#");
答案 3 :(得分:0)
这应该有效aString.replaceAll("/[^/]*#", "#")
上述正则表达式与斜杠/
和任意数量的非[^/]
字符匹配,后跟哈希#
。
答案 4 :(得分:0)
aString.replaceAll("(.*/).*#(.*)", "$1#$2");
这将捕获所有字符串直到最后/并将该字符串放在组1中,然后它将查找#,后面的字符串将被放入组2