您似乎只想删除单词开头或结尾的斜杠。所以这样的斜线需要
- 前面有空格
- 后面有空格
- 放在字符串的开头
- 放在字符串的末尾
这种方法可能存在一个缺陷,即删除 URL 地址中的最后一个斜杠,例如 http://www.some.address/ 将变为 http://www.some.address。
如果这是您正在寻找的内容,您可以尝试使用look-around 机制,
replaceAll("(?<=\\s|^)/|/(?=\\s|$)", "")
会改变的
Bodies of 5 /Irish/ immigrants /'murdered and killed by cholera'
while building a railroad/ in 1832 to http://www.bbc.com/news/
进入
Bodies of 5 Irish immigrants 'murdered and killed by cholera'
while building a railroad in 1832 to http://www.bbc.com/news
^as you see it also
removed last slash
in this url
在 URL 问题中删除最后一个 / 的方法是首先使正则表达式匹配 URL 并将其替换为自身。这将防止该 URL 中的斜线再次匹配(测试),因为它之前有空格或字符串开头,或者之后有空格或字符串结尾。
我的意思是形式的正则表达式
(matchesURL)|matchesSlashesAtStartOfWord|matchesSlashesAtEndOfWord
对于这种被(matchesURL) 匹配的正则表达式/ 将无法再次被matchesSlashesAtStartOfWord|matchesSlashesAtEndOfWord 匹配。
所以你可以使用类似的东西
replaceAll("(https?://[^/]+(/[^/]+)*/?)|(?<=\\s|^)/|/(?=\\s|$)", "$1")
它将首先匹配 url,将它们放入第 1 组,然后将它们替换为第 1 组 $1 的内容。由于正则表达式 (?<=\\s|^)/|/(?=\\s|$) 的其他情况不能在第 1 组中放置任何内容,因此 $1 将为空,因此您将用任何内容替换此类 /(您将删除它们)。
演示
String data = "Bodies of 5 /Irish/ immigrants /'murdered and killed by cholera' \r\nwhile building a railroad/ in 1832 to http://www.bbc.com/news/";
System.out.println(data);
System.out.println();
System.out.println(data.replaceAll("(https?://[^/]+(/[^/]+)*/?)|(?<=\\s|^)/|/(?=\\s|$)", "$1"));
输出
Bodies of 5 /Irish/ immigrants /'murdered and killed by cholera'
while building a railroad/ in 1832 to http://www.bbc.com/news/
Bodies of 5 Irish immigrants 'murdered and killed by cholera'
while building a railroad in 1832 to http://www.bbc.com/news/