我有一个像这样的字符串
5 /爱尔兰/移民/被霍乱杀害和杀害的尸体 建造铁路/在1832年到http://www.bbc.com/news/
我尝试使用以下
删除斜杠replaceAll("/","");
我得到的是
5名爱尔兰移民的尸体被霍乱杀害并被杀害 在1832年建造铁路到http:www.bbc.comnews
我想保留URL斜线,但想要删除文本中的其他斜杠。任何建议都将非常感谢。
答案 0 :(得分:2)
这是一个病态的例子。请记住,Regexs只是选择模式,因此最适合您的模式将取决于您的数据。
例如,在您提供的字符串中,正则表达式:[^:/m]/
就足够了。但是,这也忽略了任何文本中“m”之后的任何斜杠。这不是很好,除非你知道所有的斜线都不会在“m”之后。
对于此示例,我建议将URL分开。如果您知道URL总是在最后,您可以拆分字符串,只对文本而不是URL运行替换。
这样的事可能适合你。
字符串s
是我们的病态标题
String text = s.replace("http.*","");
String url = s.replace(".*http","http");
text = text.replace("/","");
text = text + " " + url;
这会将除了网址的所有内容保存到text
,只保存到url
的网址,然后清除text
,并将网址追加到最后。
答案 1 :(得分:2)
似乎您只想删除单词开头或结尾的斜杠。所以这样的斜线需要
此方法可能存在一个缺陷,即删除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中的斜线再次匹配(测试),以便在OR之前有空格或字符串开头,或者在其后面有空格或字符串结尾。
我的意思是正则表达式
(matchesURL)|matchesSlashesAtStartOfWord|matchesSlashesAtEndOfWord
由/
匹配的此类正则表达式(matchesURL)
的将无法再次与matchesSlashesAtStartOfWord|matchesSlashesAtEndOfWord
匹配。
所以你可以使用像
这样的东西replaceAll("(https?://[^/]+(/[^/]+)*/?)|(?<=\\s|^)/|/(?=\\s|$)", "$1")
首先匹配网址,将它们放入第1组,并将其替换为第1组$1
的内容。由于正则表达式(?<=\\s|^)/|/(?=\\s|$)
的其他情况无法在第1组中放置任何内容,因此对于{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/