Java 保护URL斜杠并删除文本中的其他斜杠

Java 保护URL斜杠并删除文本中的其他斜杠,java,regex,text,Java,Regex,Text,我有一根这样的绳子 5具尸体/爱尔兰人/移民/死于霍乱 修建铁路/1832年至 我试着用以下方法去除斜杠 replaceAll("/",""); 我得到的是 五具爱尔兰移民尸体被霍乱杀害 1832年修建铁路至http:www.bbc.comnews 我想保留URL斜杠,但想去掉文本中的其他斜杠。任何建议都将不胜感激。这是一个病态的例子。请记住,正则表达式只是拾取模式,因此适合您的最佳模式取决于您的数据 例如,在您提供的字符串中,regex:[^:/m]/就足够了。但是,这也会忽略任何文本中“m

我有一根这样的绳子

5具尸体/爱尔兰人/移民/死于霍乱 修建铁路/1832年至

我试着用以下方法去除斜杠

replaceAll("/","");
我得到的是

五具爱尔兰移民尸体被霍乱杀害 1832年修建铁路至http:www.bbc.comnews


我想保留URL斜杠,但想去掉文本中的其他斜杠。任何建议都将不胜感激。

这是一个病态的例子。请记住,正则表达式只是拾取模式,因此适合您的最佳模式取决于您的数据

例如,在您提供的字符串中,regex:
[^:/m]/
就足够了。但是,这也会忽略任何文本中“m”之后的任何斜杠。这并不好,除非你知道所有的斜杠都不会在“m”之后

对于这个例子,我建议将URL分开。如果知道URL将始终位于末尾,则可以拆分字符串并仅对文本而不是URL运行替换

像这样的东西可能对你很有用

字符串
s
是我们病态的标题

String text = s.replace("http.*","");
String url = s.replace(".*http","http");
text = text.replace("/","");
text = text + " " + url;

这将保存除指向
文本
的url之外的所有内容,仅保存指向
url
的url,然后清除
文本
,并将url追加回末尾

您似乎只想删除单词开头或结尾的斜杠。因此,这样的削减需要进行

  • 以前有空位吗
  • 留有余地
  • 放在字符串的开头
  • 放在绳子的末端
这种方法可能存在一个缺陷,即删除URL地址中的最后一个斜杠,如
http://www.some.address/
将变成
http://www.some.address

如果这就是你要找的,你可以试试机械装置

replaceAll("(?<=\\s|^)/|/(?=\\s|$)", "")
进入


删除URL问题中最后一个
/
的方法是先让正则表达式匹配URL,然后用它自己替换它。这将防止再次匹配(测试)此URL中的斜杠,因为斜杠前面有空格或字符串开头,后面有空格或字符串结尾。
我指的是形式上的正则表达式

(matchesURL)|matchesSlashesAtStartOfWord|matchesSlashesAtEndOfWord
对于这样的正则表达式,由
(matchesURL)匹配的
/
将无法由
匹配lashesatstartofword |匹配lashesatenofword
再次匹配

所以你可以用

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/

使用string.split拆分字符串;然后循环浏览单词,如果不是URL,则从中删除“/”。您可以使用URLValidator检查URL是否有效,例如,在这里使用URLValidator可能会帮助您
\s/|/\s
,这意味着任何
/
之前或之后都有空间。或者使其更加精确
(?更换时无需分组
/
,因此请尝试
(?那不是真的。正如我在文章中提到的,只要url在末尾,它就可以工作。但是,通过一点额外的代码,它可以适应于将url恢复到任何位置。这就是我所说的,我说它适用于本例,但不适用于Allon。我再次从这个开始。任何解决方案的有效性都完全取决于dat一种格式。根据我们对数据的了解,这是有效的。如果我们能看到更多关于格式的信息,我会更新。
replaceAll("(https?://[^/]+(/[^/]+)*/?)|(?<=\\s|^)/|/(?=\\s|$)", "$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/