2011-12-05 27 views
8

Estoy buscando una expresión regular para que coincida con las palabras con guiones en python.Python Regex para palabras con guiones

Lo más cerca que he logrado conseguir es: '\ w + - \ w + [- w +] *'

text = "one-hundered-and-three- some text foo-bar some--text" 
hyphenated = re.findall(r'\w+-\w+[-\w+]*',text) 

qué lista vuelve [ 'uno-hundered-y-tres', 'foo -bar'].

Esto es casi perfecto excepto por el guión final después de 'tres'. Solo quiero el guión adicional si es seguido por una 'palabra'. es decir, en lugar del '[- \ w +] *' Necesito algo como '(- \ w +) *' que pensé que funcionaría, pero no (devuelve ['-three,' ']). es decir, algo que coincide con | palabra seguido de guión seguido de palabra seguido de palabra_hipón 0 o más veces |.

+1

No sé lo que va a utilizar esto para, pero ¿ha considerado los casos en que un remolque o un guión prefijado es [válida] (http://en.wikipedia.org/wiki/Hyphen) , como "decimonoveno y vigésimo siglo" o "propiedad y operación de inversionistas"? –

+1

El principal problema en su propia expresión son los corchetes. No agrupan el contenido, crean una clase de personaje, eso es completamente diferente. – stema

+0

Gracias por la entrada, lazyr. He considerado los casos que señala y no plantearán ningún problema. Gracias por la aclaración, stema. Me di cuenta de que los corchetes no agrupaban el contenido, pero daban como resultado la coincidencia más cercana de lo que estaba intentando hacer. – Sixhobbits

Respuesta

18

Prueba esto:

re.findall(r'\w+(?:-\w+)+',text) 

Aquí consideramos una palabra con guión a ser:

  • una serie de caracteres de texto
  • seguido de cualquier número de:
    • un solo guión
    • seguido de los caracteres de la palabra
Cuestiones relacionadas