2009-08-27 12 views
6

Aquí está el mensaje de Twitter que estoy tratando de analizar (como se puede ver, algunas de ellas no son las etiquetas, sólo una parte de las direcciones URL):de expresiones regulares para analizar Hashtags en Java

#anothertag Arrogance and bad PR http://www.adobe.com/index.html#anchor1. John 
Nack on &#Adobe: Information about Photoshop© CS3 on Snow Leopard 
#fail #design</pre> 

Esta expresión regular es lo que tengo hasta ahora, pero todavía recoge algunas de las etiquetas url:

[##]+([A-Za-z0-9-_]+) 
+0

Entonces, ¿qué estás tratando de obtener exactamente? ¿Puedes proporcionar el resultado esperado? – serg

+0

Lo siento, debería haber sido más claro. Estoy tratando de hacer una coincidencia para encontrar cuáles son todas las etiquetas en un tweet determinado. Esperaría que el tweet de arriba devolvería 'otro tipo', 'fallar' y 'diseño'. –

+0

¿Has probado este? http://stackoverflow.com/questions/1563844/best-hashtag-regex/5768660#5768660 La regex arcain provee se basa en el código de Twitter y si lo estoy leyendo correctamente, se asegura de que el mensaje no comience con una hashtag. Si desea desactivar eso, puede eliminar el primer grupo entre paréntesis. Debería mencionar que no he probado esta expresión regular personalmente :) – johncip

Respuesta

6

no es irónico, tan pronto como publicar esto me parece una respuesta. Entonces, si está buscando un patrón coincidente para hacer esto, lo siguiente parece funcionar:

(?: \ S | \ A) [##] + ([A-Za-z0-9 -_] +)

Voy a hacer muchas más pruebas con esto para ver si hay casos extremos que están fuera del alcance de esta expresión y reportaré si encuentro alguno.

+5

(?: \ s | \ A | ^) [##] + ([A-Za-z0-9 -_] +) también acepta un hashtag al principio del tweet – benjguin

3

creo que este

(\s|\A)#(\w+) 

funciona tan bien y es un poco más preciso. BTW, cuando trabajo con expresiones regulares de Java siempre uso regexplanet para probar mis expresiones. Mucho más rápido que probar en Java.

--Hardy

3

@ Daniel Dura: [##] esto se supone que es inútil. Los corchetes [] se utilizan para denotar clases de caracteres. [##] es lo mismo que [#]. Y [##] + es lo mismo que [#] +.

Cuestiones relacionadas