Java移除Twitter文本中URL失效问题求助
问题分析与解决方案
你的正则表达式test.replaceAll("http.*?\\s", "")之所以处理部分文本失效,主要有这几个关键原因:
- 未覆盖HTTPS开头的链接:你的正则只匹配
http开头的URL,但示例里的链接是https//t/MUY0bj2qMT(虽然格式不规范少了冒号),http无法匹配https开头的内容。 - 依赖URL后有空白字符:正则末尾的
\\s要求URL后面必须有空格,但这个示例里的URL是在字符串的最后,没有后续空白字符,所以正则无法匹配到它。
改进后的正则方案
我们可以调整正则来解决这些问题,这里提供两种可靠的写法:
写法一(更精准的正向预查):
String cleaned = cuatro.replaceAll("https?.*?(?=\\s|$)", "");
写法二(更简洁的非空白字符匹配):
String cleaned = cuatro.replaceAll("https?\\S+", "");
测试你的示例字符串
用改进后的代码处理你提供的字符串:
String cuatro = ("#TodosPorKiKi El plan de flia solidaria No Puede exceder los 6meses. La justicia de Santa Fe lo abandonó 2 años y ahora\r\n" + "Quieren hacerse los legalistas\r\n" + "#Verguenza Respete los derechos del niño @MiguelLifschitz @DataLifschitz https//t/MUY0bj2qMT"); String result = cuatro.replaceAll("https?\\S+", ""); System.out.println(result);
输出结果会是:
#TodosPorKiKi El plan de flia solidaria No Puede exceder los 6meses. La justicia de Santa Fe lo abandonó 2 años y ahora
Quieren hacerse los legalistas
#Verguenza Respete los derechos del niño @MiguelLifschitz @DataLifschitz
这样就成功移除了之前没匹配到的URL。
补充说明
https?中的?表示s是可选的,同时覆盖http和https开头的链接;\\S+匹配一个或多个非空白字符,不管URL在字符串中间还是末尾都能准确匹配;- 这个正则也能兼容Twitter短链的各种不规范格式(比如示例里少冒号的情况),因为短链本身都是连续的非空白字符。
内容的提问来源于stack exchange,提问作者Fernando
相关产品推荐
相关产品推荐

