2012-09-11 29 views
11

cómo quitar en la URL presente en el ejemplo de texto https://stackoverflow.com/posts/12684739/edit-submit/64cdc173-a15f-4a54-bfbb-6701a199642b cadena str = "Fear psicosis después #AssamRiots - http://t.co/LdEbWTgDhttp://t.co/mksVZKBz";Extracción de la url de texto usando java

utilizando la expresión regular.

Quiero eliminar toda la URL en el texto. pero no está trabajando

mi código es

String pattern = "(http(.*?)\\s)"; 
Pattern pt = Pattern.compile(pattern); 
Matcher namemacher = pt.matcher(input); 
if (namemacher.find()) { 
    str=input.replace(namemacher.group(0), ""); 
} 
+1

No entiendo su pregunta ... proporcionar algunos ejemplos – IProblemFactory

+0

Quiero quitar la url que está llegando con el texto. –

+0

Puede consultar esta publicación: http: // stackoverflow.com/questions/8694984/remove-part-of-string – Rohwedder

Respuesta

15

entrada del String que contiene la url

private String removeUrl(String commentstr) 
    { 
     String urlPattern = "((https?|ftp|gopher|telnet|file|Unsure|http):((//)|(\\\\))+[\\w\\d:#@%/;$()~_?\\+-=\\\\\\.&]*)"; 
     Pattern p = Pattern.compile(urlPattern,Pattern.CASE_INSENSITIVE); 
     Matcher m = p.matcher(commentstr); 
     int i = 0; 
     while (m.find()) { 
      commentstr = commentstr.replaceAll(m.group(i),"").trim(); 
      i++; 
     } 
     return commentstr; 
    } 
+0

funcionó perfectamente :) – ir2pid

+0

Gracias! Una gran solución. –

+0

después de 3 a 4 horas me di cuenta de que su código no funciona –

4

Bueno, usted no ha proporcionado ninguna información sobre su texto, por lo que con la asunción de su texto con este aspecto: "Some text here http://www.example.com some text there", usted puede hacer esto:

String yourText = "blah-blah"; 
String cleartext = yourText.replaceAll("http.*?\\s", " "); 

Esto eliminará todas las secuencias que comiencen por "http" y hasta el primer carácter de espacio.

Debe leer el Javadoc en la clase String. Te aclarará las cosas.

+2

Debe ser 'yourText.replaceAll (" http; *? \\ s "," ");' – Jaec

2

¿Cómo se define la URL? Puede que no solo desee filtrar http: // sino también https: // y otros protocolos como ftp: //, rss: // o protocolos personalizados.

Tal vez esta expresión regular haría el trabajo:

[\S]+://[\S]+

Explicación:

  • uno o más espacios en blanco no
  • seguido de la cadena ": //"
  • seguido de uno o más espacios no en blanco
+0

tengo string #AssamRiots: Situación calmada en Dhubri; toque de queda relajado durante 2 horas - Daily Bhaskar http://t.co/ocq6RNFI –

+0

no mi oración no termina con espacios en blanco –

+0

La expresión regular que publiqué también debería funcionar cuando la URL está al final del mensaje. Cuando no hay espacios en blanco después de la URL, coincide hasta el final del mensaje. Al menos lo hace en http://regexpal.com/ – Philipp

0

m.group(0) debe ser sustituido por una cadena vacía en lugar de m.group(i) donde i se incrementa con cada llamada a m.find() como se menciona en una de las respuestas anteriores.

private String removeUrl(String commentstr) 
{ 
    String urlPattern = "((https?|ftp|gopher|telnet|file|Unsure|http):((//)|(\\\\))+[\\w\\d:#@%/;$()~_?\\+-=\\\\\\.&]*)"; 
    Pattern p = Pattern.compile(urlPattern,Pattern.CASE_INSENSITIVE); 
    Matcher m = p.matcher(commentstr); 
    StringBuffer sb = new StringBuffer(commentstr.length); 
    while (m.find()) { 
     m.appendReplacement(sb, ""); 
    } 
    return sb.toString(); 
} 
1

Tenga en cuenta que si su URL contiene caracteres como & y \ continuación, las respuestas anteriores no funcionarán porque replaceAll no puede manejar esos caracteres. Lo que funcionó para mí fue eliminar esos caracteres en una nueva variable de cadena, luego quitar esos caracteres de los resultados de m.find() y usar replaceAll en mi nueva variable de cadena.

private String removeUrl(String commentstr) 
{ 
    // rid of ? and & in urls since replaceAll can't deal with them 
    String commentstr1 = commentstr.replaceAll("\\?", "").replaceAll("\\&", ""); 

    String urlPattern = "((https?|ftp|gopher|telnet|file|Unsure|http):((//)|(\\\\))+[\\w\\d:#@%/;$()~_?\\+-=\\\\\\.&]*)"; 
    Pattern p = Pattern.compile(urlPattern,Pattern.CASE_INSENSITIVE); 
    Matcher m = p.matcher(commentstr); 
    int i = 0; 
    while (m.find()) { 
     commentstr = commentstr1.replaceAll(m.group(i).replaceAll("\\?", "").replaceAll("\\&", ""),"").trim(); 
     i++; 
    } 
    return commentstr; 
}  
0

Si se puede avanzar hacia pitón entonces se puede encontrar mucho mejor solución en este caso el uso de estos códigos,

import re 
text = "<hello how are you ?> then ftp and mailto and gopher and file ftp://ideone.com/K3Cut rthen you " 
text = re.sub(r"ftp\S+", "", result) 
print(result) 
Cuestiones relacionadas