2017-07-13 3 views
1

Je suis novice en pyparsing. J'essaye d'analyser un texte mais je ne comprends pas vraiment comment se comporte le pyparage.Analyse de texte usng La combinaison ne donne aucun résultat

from pyparsing import * 

number = Word(nums) 
yearRange = Combine(number+"-"+number) 
copyright = Literal("Copyright (C)")+yearRange+Literal("CA. All Rights Reserved.") 
copyrightCombine = Combine(copyright) 
date = Combine(Word(nums)+"/"+Word(nums)+"/"+Word(nums)) 
time = Combine(Word(nums)+":"+Word(nums)+":"+Word(nums)) 
dateTime = Combine(date+time) 
pageNumber = Suppress(Literal("PAGE"))+number 
pageLine = Word(nums)+"Copyright (C) 1986-2014 CA. All Rights Reserved."+Combine(Word(nums)+"/"+Word(nums)+"/"+Word(nums))+Combine(Word(nums)+":"+Word(nums)+":"+Word(nums))+pageNumber 
pageLine2 = number+copyright+dateTime+pageNumber 
pageLine3 = Word(nums)+copyright+Combine(Word(nums)+"/"+Word(nums)+"/"+Word(nums))+Combine(Word(nums)+":"+Word(nums)+":"+Word(nums))+pageNumber 

test = "1 Copyright (C) 1986-2014 CA. All Rights Reserved.            07/05/17 10:58:56  PAGE 1241" 
print(pageLine.searchString(test)) 
print(copyright.searchString(test)) 
print(copyrightCombine.searchString(test)) 
print(pageLine2.searchString(test)) 
print(pageLine3.searchString(test)) 

Sortie:

[['1', 'Copyright (C) 1986-2014 CA. All Rights Reserved.', '07/05/17', '10:58:56', '1241']] 
[['Copyright (C)', '1986-2014', 'CA. All Rights Reserved.']] 
[] 
[] 
[['1', 'Copyright (C)', '1986-2014', 'CA. All Rights Reserved.', '07/05/17', '10:58:56', '1241']] 

Je veux utiliser l'analyseur défini comme pageLine2 pour pour une raison quelconque, l'analyseur copyrightCombine ne renvoie aucun résultat. Il semble que lorsque j'essaie d'utiliser Combine(), quelque chose provoque l'analyse de ne pas retourner la correspondance.

Répondre

1

J'ai compris que le comportement se produisait à cause du fonctionnement de Combine(). Il s'attend à ce qu'il n'y ait pas d'espace entre les jetons, mais il peut être ignoré.

Selon the documentation:

Moissonneuse - jointures tous les jetons appariées en une seule chaîne, en utilisant spécifié joinString (par défaut joinString = ""); attend à être adjacent, sans espace entre eux (peut être remplacée en spécifiant adjacente = False dans le constructeur) tous jetons correspondant à

+0

S'il vous plaît vérifier également la documentation en ligne à https://pythonhosted.org/pyparsing, qui contient plus de 1000 lignes d'exemples en ligne (ou vous pouvez également utiliser la commande 'help' de Python, comme dans' help (Combine) '. – PaulMcG