Quelqu'un peut-il vous aider avec le modèle de regex pour la chaîne ci-dessous en Python? J'ai Je veux que regex puisse me donner un mot avant code> de code> et un après je veux .log code> et je souhaite trouver ci-dessous la ligne à partir de la chaîne que je dois obtenir l'utilisateur et la propriété intellectuelle. de code>. p> root code> et 123.183.209.132 code> de la chaîne ci-dessus p> def parse(filename, date=None):
try:
# string = 'Failed password for ([a-z]*|[a-z]* [a-z]* [a-z]*) from '
string = 'Failed password for ([a-z]*|[a-z]* [a-z]* [a-z]*) from [0-9]+(?:\.[0-9]+){3}'
# string_sub = 'for (?<user>[a-zA-Z\.]+).*?(?<ip>(?:\d{1,3}\.){3}\d{1,3})'
# string_re = re.compile(r"^[^ ]+ - (C[^ ]*) \[([^ ]+)").match
match_list =[]
with open(filename, 'r') as file:
for line in file:
for match in re.finditer(string, line, re.S):
match_text = match.group()
user_ip = re.search(r'Failed password for .*?(\w+) from (\d+(?:\.\d+){3})', match_text)
user = user_ip.groups()[0]
print(user)
except KeyError as e:
msg="key %s is missing" % str(e)
return msg
except Exception as e:
return str(e)
3 Réponses :
Si je comprends correctement, vous voulez essentiellement le mot (nom d'utilisateur) après https: // regex101 .COM / R / AOJBYS / 1 . Accordé, il s'agit d'une forme courte pour une adresse IP, mais de le rendre plus correct, vous devez utiliser un REGEX IPv4 . P> En outre, dans votre question, vous ne dites pas ce qui devrait être capturé à partir de ce qui suit, ce qui pourrait modifier la regex ci-dessus. P> pour code> et le ip code> de cette ligne? Si c'est le cas, que diriez-vous: Failed password for invalid user packer from 13.82.211.217 port 45832 ssh2.
Ce serait facile si je reçois un mot avant et après le mot de code>.
@aakankshakhandelwal mais votre dernier exemple ne contient pas le mot du tout?
Il y a deux chaînes différentes, donc j'aurai besoin de deux regex différentes. 1. Pour REGEX.SUB () CODE> Pour obtenir l'utilisateur et la propriété intellectuelle à partir de la chaîne. 2. Obtenir un objet et une adresse IP de 2e chaîne.
regex peut être surchargé pour votre cas d'utilisation ... Avez-vous essayé des choses plus simples, comme ceci, par exemple:
(?: # non capture group
Failed password # literally
| # OR
reverse mapping # literally
.+? # 1 or more any character, not greedy
) # end group
for # literally
.*? # 0 or more any character
([\w.]+) # group 1, 1 or more word character or dot
\s+ # 1 or more spaces
(?:from |\[) # non capture group, from OR opening square bracket
(\d+(?:\.\d+){3}) # group 2, IP
Travaillé parfaitement pour la chaîne supérieure. J'ai besoin de la même chose pour une chaîne donnée ci-dessous aussi Vérification de la cartographie inverse gettaddrinfo pour non défini.datagroup.ua [93.183.207.5] a échoué - tentative de rupture possible! Code>.
Est-ce que cela répond à votre question? apprendre des expressions régulières
J'ai modifié ma question je suis bloqué avec l'obtention d'un utilisateur et de votre adresse IP.
J'ai fini avec regex pour la 1ère partie, je n'ai besoin que de regex pour une partie de la 2e chaîne. Quelqu'un peut-il aider avec un seul?