Regex pour obtenir les mots après la chaîne correspondante

Ci-dessous le contenu:

Subject: Security ID: S-1-5-21-3368353891-1012177287-890106238-22451 Account Name: ChamaraKer Account Domain: JIC Logon ID: 0x1fffb Object: Object Server: Security Object Type: File Object Name: D:\ApacheTomcat\apache-tomcat-6.0.36\logs\localhost.2013-07-01.log Handle ID: 0x11dc 

Je dois capturer les mots après le nom de l’ Object Name: mot dans cette ligne. Qui est D:\ApacheTomcat\apache-tomcat-6.0.36\logs\localhost.2013-07-01.log . J’espère que quelqu’un peut m’aider avec ça.

^.*\bObject Name\b.*$ correspond – Nom d’object

Ce qui suit devrait fonctionner pour vous:

 [\n\r].*Object Name:\s*([^\n\r]*) 

Exemple de travail

Votre correspondance souhaitée sera dans le groupe de capture 1.


 [\n\r][ \t]*Object Name:[ \t]*([^\n\r]*) 

Serait similaire mais ne permet pas des choses comme “Nom d’object blah: blah” et assurez-vous également de ne pas capturer la ligne suivante s’il n’y a pas de contenu réel après “Nom d’object:”

Mais j’ai besoin que le résultat du match soit … pas dans un groupe de match …

Pour ce que vous essayez de faire, cela devrait fonctionner. \K réinitialise le sharepoint départ du match.

 \bObject Name:\s+\K\S+ 

Vous pouvez faire la même chose pour obtenir vos correspondances d’ Security ID .

 \bSecurity ID:\s+\K\S+ 

Tu y es presque. Utilisez le regex suivant (avec l’option multiligne activée)

 \bObject Name:\s+(.*)$ 

Le match complet serait

 Object Name: D:\ApacheTomcat\apache-tomcat-6.0.36\logs\localhost.2013-07-01.log 

alors que le groupe capturé contiendrait

 D:\ApacheTomcat\apache-tomcat-6.0.36\logs\localhost.2013-07-01.log 

Si vous souhaitez capturer le chemin de fichier directement utiliser

 (?m)(?< =\bObject Name:).*$ 

Cela pourrait fonctionner pour vous selon la langue que vous utilisez

 (?< =Object Name:).* 

C'est une affirmation positive. Plus d'informations peuvent être trouvées ici

Cela ne fonctionnera cependant pas avec le script java. Dans votre commentaire, j'ai lu que vous l'utilisiez pour logstash. Si vous utilisez l'parsing syntaxique GROK pour logstash, cela fonctionnerait. Vous pouvez vous vérifier ici

https://grokdebug.herokuapp.com/

entrer la description de l'image ici

Voici un script perl rapide pour obtenir ce dont vous avez besoin. Nécessite un chomping des espaces.

 #!/bin/perl $sample = <  

Ceci est une solution python.

 import re line ="""Subject: Security ID: S-1-5-21-3368353891-1012177287-890106238-22451 Account Name: ChamaraKer Account Domain: JIC Logon ID: 0x1fffb Object: Object Server: Security Object Type: File Object Name: D:\ApacheTomcat\apache-tomcat-6.0.36\logs\localhost.2013-07-01.log Handle ID: 0x11dc""" regex = (r'Object Name:\s+(.*)') match1= re.findall(regex,line) print (match1) *** Remote Interpreter Reinitialized *** >>> ['D:\\ApacheTomcat\x07pache-tomcat-6.0.36\\logs\\localhost.2013-07-01.log'] >>>