Por que a regex para coincidir com a tag projeto não está funcionando?

votos
3

Alguém pode fornecer orientações sobre o porquê do seguinte regex não está funcionando?

project = 'AirPortFamily'
line = 'AirPortFamily-1425.9:'
if re.findall('%s-(\d+):'%project,line):
    print line

Resultado esperado: -

AirPortFamily-1425.9
Publicado 20/09/2018 em 04:20
fonte usuário
Em outras línguas...                            


5 respostas

votos
1

Resposta por Brandon parece ser bom.

Mas no caso de haver uma condição como "Para uma tag para ser válido, ele deve terminar com dois pontos (:)"
Para cobrir essa condição, modificando a resposta de Brandon um pouco

project = 'AirPortFamily'
line = 'AirPortFamily-1425.9:'
matches = re.findall('%s-\d+\.+\d+\.*\d+:$'%project,line)
if matches:
    for elem in matches:
        print elem.split(':')[0]

Aqui é o seu trabalho

#Matching lines with colon(:) at the end
>>> import re
>>> project = 'AirPortFamily'
>>> line = 'AirPortFamily-1425.9:'
>>> matches = re.findall('%s-\d+\.+\d+\.*\d+:$'%project,line)
>>> if matches:
...     for elem in matches:
...             print elem.split(':')[0]
...
AirPortFamily-1425.9 #Look, the output is the way you want.

#Below snippet with same regex and different line content (without :) doesn't match it
>>> line = 'AirPortFamily-1425.9'
>>> matches = re.findall('%s-\d+\.+\d+\.*\d+:$'%project,line)
>>> if matches:
...     for elem in matches:
...             print elem.split(':')[0]
...
>>> #Here, no output means no match
Respondeu 20/09/2018 em 04:48
fonte usuário

votos
1

Você deve coincidir com os grupos opcionais de algarismos, precedidos por um ponto:

if re.findall(r'(%s-\d+(?:\.\d+)*):'%project,line):
Respondeu 20/09/2018 em 04:31
fonte usuário

votos
0

Sobre as possibilidades com 1.1.1.1.1que estou recebendo a :tão só retirando-lhe a partir dos resultados

if re.findall(r'%s-[\d+\.\d+]+:'%project,line):
    print(line.strip(':'))
(xenial)vash@localhost:~/python/stack_overflow$ python3.7 formats.py 
AirPortFamily-1425.9.1.1.1
Respondeu 20/09/2018 em 04:49
fonte usuário

votos
0

Esta é a minha regex, o meu teste na edição regex101 novamente

import re
project = 'AirPortFamily'
line = 'AirPortFamily-1425.9:AirPortfamily-14.5.9AirPortFamily-14.2.5.9:'
result = re.findall('%s[0-9.-]+:'%project,line) #this dose not cantain ':' [s[:-1] for s in re.findall('%s[0-9.-]+:'%project,line)]
if result:
    for each in result:
        print (each)
Respondeu 20/09/2018 em 04:46
fonte usuário

votos
0

Seu regex está faltando o. depois de o primeiro conjunto de números. Aqui está um exemplo de trabalho:

project = 'AirPortFamily'
line = 'AirPortFamily-1425.9:'
matches = re.findall('%s-\d+\.\d+'%project,line)
if matches:
    print matches
Respondeu 20/09/2018 em 04:32
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more