2011-04-25 1 views
0

Je suis en train d'utiliser des expressions régulières pour analyser le texte comme celui-ci:Utilisation d'expressions régulières pour mon journal des erreurs en Java

'''ErrorID: 951574305 
Time:  Mon Apr 25 16:01:34 CEST 2011 
URL:  /documents.do 
HttpCode: null 
Error: class java.lang.NullPointerException: null''' 

Où mots-clés ErrorID:, Heure: URL: sont toujours les mêmes et J'ai besoin de les chercher. Comment puis-je analyser ce texte?

+0

Cela semble trop rapide pour regex ... vous pourriez juste diviser sur newline puis deux points et les espaces de finition. –

Répondre

0

Si votre implémentation prend en charge les groupes ... nommé

/ErrorID:\s+(?<ID>.*)\nTime:\s+(?<Time>.*)\nURL:\s+(?<URL>.*)/g 

Vous pouvez ensuite les référencer par leur nom. Voir à http://refiddle.com/10w

Sinon par index

/ErrorID:\s+(.*)\nTime:\s+(.*)\nURL:\s+(.*)/g 

1 $ pour l'identification, 2 $ pour l'heure et 3 $ pour l'URL. http://refiddle.com/10x

1
import re 
re.findall("ErrorID:\s+(.*)", text) 
# ['951574305'] 
re.findall("Time:\s+(.*)", text) 
# ['Mon Apr 25 16:01:34 CEST 2011'] 
re.findall("URL:\s+(.*)", text) 
# ['/documents.do'] 

Le regex fonctionne de cette façon: elle correspond à sur ErrorID: (ou autre délimiteur) plus quelques espaces, plus le reste de la chaîne jusqu'à la nouvelle ligne/fin de chaîne. Puis il renvoie ce "quelque chose" après les espaces. En outre, le résultat sera une liste dans laquelle vous aurez besoin du premier élément. Il peut y avoir d'autres stratégies pour trouver ce dont vous avez besoin, mais j'ai trouvé cela le plus approprié.

+0

J'ai juste besoin de correspondre à regexp pour ce modèle, je me fous des valeurs. – Natta

0

Si vous avez besoin tout cela dans la chaîne et ne savent pas où ils sont et peuvent utiliser des assertions:

(?=[\S\s]*ErrorID:)(?=[\S\s]*Time:)(?=[\S\s]*URL:)

Questions connexes