首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >保护URL斜杠并消除文本中的其他斜杠

保护URL斜杠并消除文本中的其他斜杠
EN

Stack Overflow用户
提问于 2014-07-07 14:13:11
回答 2查看 835关注 0票数 3

我有一根这样的绳子

在修建一条通往http://www.bbc.com/news/的铁路时,5具/爱尔兰人/移民/“被霍乱杀害”的身体

我试着用下面的方法去除斜杠

代码语言:javascript
复制
replaceAll("/","");

我得到的是

在1832年修建一条通往http:www.bbc.comnews的铁路时,5名爱尔兰移民的身体被霍乱杀害。

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-07-07 14:27:02

似乎你只想删除斜杠,这是在开始或结束的话。所以这样的斜线需要

  • 在此之前有空间
  • 后有空间
  • 放在字符串的开头。
  • 放在字符串的末尾

这种方法有一个潜在的缺陷,就是删除像http://www.some.address/这样的URL地址中的最后一个斜杠就会变成http://www.some.address

如果这就是你想要的,你可以尝试使用环顾四周机制,

代码语言:javascript
复制
replaceAll("(?<=\\s|^)/|/(?=\\s|$)", "")

会改变的

代码语言:javascript
复制
Bodies of 5 /Irish/ immigrants /'murdered and killed by cholera' 
while building a railroad/ in 1832 to http://www.bbc.com/news/

转到

代码语言:javascript
复制
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问题中删除最后一个/的方法是先使regex匹配URL并将其替换为自己。这将防止从这个URL斜杠再次匹配(测试),因为有空格或开始字符串之前或有空格或结束字符串之后。

我是说形式上的regex

代码语言:javascript
复制
(matchesURL)|matchesSlashesAtStartOfWord|matchesSlashesAtEndOfWord

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

所以你可以用这样的方法

代码语言:javascript
复制
replaceAll("(https?://[^/]+(/[^/]+)*/?)|(?<=\\s|^)/|/(?=\\s|$)", "$1")

它将首先匹配urls,将它们放入第1组,并替换为第1组$1的内容。由于regex (?<=\\s|^)/|/(?=\\s|$)的其他情况不能在第1组中放置任何东西,因此$1将为空,因此您将用空替换该/ (您将删除它们)。

演示

代码语言:javascript
复制
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"));

输出

代码语言:javascript
复制
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/
票数 2
EN

Stack Overflow用户

发布于 2014-07-07 14:18:39

这是一个病态的例子。记住,Regexs只是收集模式,所以最好的模式将取决于您的数据。

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

对于这个例子,我建议分离URL。如果您知道URL总是在末尾,您可以拆分字符串,只在文本上运行替换,而不是URL。

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

String s是我们病态的标题

代码语言:javascript
复制
String text = s.replace("http.*","");
String url = s.replace(".*http","http");
text = text.replace("/","");
text = text + " " + url;

这将保存除了url到text的所有东西,只将url保存到url,然后清除text,并将url追加到末尾。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24612682

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档