online number example python regex

number - Python RegEx grupos mĂșltiples



re.split python (4)

A veces, es más fácil sin expresiones regulares.

>>> s = ''''''Lun: 0 1 2 3 295 296 297 298'''''' >>> if "Lun: " in s: ... items = s.replace("Lun: ","").split() ... for n in items: ... if n.isdigit(): ... print n ... 0 1 2 3 295 296 297 298

Me confundo devolver varios grupos en Python. Mi RegEx es este:

lun_q = ''Lun:/s*(/d+/s?)*''

Y mi cadena es

s = ''''''Lun: 0 1 2 3 295 296 297 298''''''`

Devuelvo un objeto coincidente y luego quiero ver los grupos, pero todo muestra el último número (258):

r.groups() (u''298'',)

¿Por qué no devuelve grupos de 0,1,2,3,4 etc.?


Otro enfoque sería usar la expresión regular que tiene para validar sus datos y luego usar una expresión regular más específica que se dirija a cada elemento que desea extraer utilizando un iterador de coincidencia.

import re s = ''''''Lun: 0 1 2 3 295 296 297 298'''''' lun_validate_regex = re.compile(r''Lun:/s*((/d+)(/s/d+)*)'') match = lun_validate_regex.match(s) if match: token_regex = re.compile(r"/d{1,3}") match_iterator = token_regex.finditer(match.group(1)) for token_match in match_iterator: #do something brilliant


Si está buscando una salida como 0,1,2,3,4, etc. La respuesta simple es la siguiente.

imprimir re.findall (''/ d'', s)


Su expresión regular solo contiene un par de paréntesis (un grupo de captura), por lo que solo obtendrá un grupo en su coincidencia. Si utiliza un operador de repetición en un grupo de captura ( + o * ), el grupo se "sobrescribe" cada vez que se repite el grupo, lo que significa que solo se captura la última coincidencia.

En su ejemplo aquí, probablemente sea mejor usar .split() , en combinación con una expresión regular:

lun_q = ''Lun:/s*(/d+(?:/s+/d+)*)'' s = ''''''Lun: 0 1 2 3 295 296 297 298'''''' r = re.search(lun_q, s) if r: luns = r.group(1).split() # optionally, also convert luns from strings to integers luns = [int(lun) for lun in luns]