tickettypepat = (r'MIS Notes:.*(//p//)?.*')
retype = re.search(tickettypepat,line)
if retype:
print retype.group(0)
print retype.group(1)
Étant donné l'entrée.Échec de la correspondance optionnelle Regex en cas de panne python
MIS Notes: //p//
Quelqu'un peut-il me dire pourquoi le groupe (0) est
MIS Notes: //p//
et le groupe (1) revient sur Aucun?
À l'origine, j'utilisais regex parce que, avant de rencontrer des problèmes, la correspondance était plus complexe que la simple correspondance // p // voici le code complet. Je suis assez nouveau à ce sujet, alors pardonnez mon noobness, je suis sûr qu'il y a de meilleures façons d'accomplir une grande partie de cela et si quelqu'un a envie de les signaler, ce serait génial. Mais mis à part le problème avec la regex pour // [pewPEW] // étant trop gourmand il semble être fonctionnel. J'apprécie l'aide.
Prend le texte et nettoie/convertit certaines choses.
filename = (r'.\4-12_4-26.txt')
import re
import sys
#Clean up output from the web to ensure that you have one catagory per line
f = open(filename)
w = open('cleantext.txt','w')
origdatepat = (r'(Ticket Date:)([0-9]+/[0-9]+/[0-9]+),([0-9]+:[0-9]+ [PA]M)')
tickettypepat = (r'MIS Notes:.*(//[pewPEW]//)?.*')
print 'Begining Blank Line Removal'
for line in f:
redate = re.search(origdatepat,line)
retype = re.search(tickettypepat,line)
if line == ' \n':
line = ''
print 'Removing blank Line'
#remove ',' from time and date line
elif redate:
line = redate.group(1) + redate.group(2)+ redate.group(3)+'\n'
print 'Redating... ' + line
elif retype:
print retype.group(0)
print retype.group(1)
if retype.group(1) == '//p//':
line = line + 'Type: Phone\n'
print 'Setting type for... ' + line
elif retype.group(1) == '//e//':
line = line + 'Type: Email\n'
print 'Setting type for... ' + line
elif retype.group(1) == '//w//':
line = line + 'Type: Walk-in\n'
print 'Setting type for... ' + line
elif retype.group(1) == ('' or None):
line = line + 'Type: Ticket\n'
print 'Setting type for... ' + line
w.write(line)
print 'Closing Files'
f.close()
w.close()
Et voici quelques entrée de l'échantillon.
Ticket No.: 20100426132
Ticket Date: 04/26/10, 10:22 AM
Close Date:
Primary User: XXX
Branch: XXX
Help Tech: XXX
Status: Pending
Priority: Medium
Application: xxx
Description: some issue
Resolution: some resolution
MIS Notes: some random stuff //p// followed by more stuff
Key Words:
Ticket No.: 20100426132
Ticket Date: 04/26/10, 10:22 AM
Close Date:
Primary User: XXX
Branch: XXX
Help Tech: XXX
Status: Pending
Priority: Medium
Application: xxx
Description: some issue
Resolution: some resolution
MIS Notes: //p//
Key Words:
Ticket No.: 20100426132
Ticket Date: 04/26/10, 10:22 AM
Close Date:
Primary User: XXX
Branch: XXX
Help Tech: XXX
Status: Pending
Priority: Medium
Application: xxx
Description: some issue
Resolution: some resolution
MIS Notes: //e// stuff....
Key Words:
Ticket No.: 20100426132
Ticket Date: 04/26/10, 10:22 AM
Close Date:
Primary User: XXX
Branch: XXX
Help Tech: XXX
Status: Pending
Priority: Medium
Application: xxx
Description: some issue
Resolution: some resolution
MIS Notes:
Key Words:
Merci pour l'explication approfondie, je pense que je comprends maintenant, je dois courir à une réunion pour un tic, mais au retour va tester. – AaronG
Je l'ai essayé et je pense que nous sommes proches MIS Notes:. *? (// [pewPEW]) correspond à tous les cas où il y a une balise // * // quelconque. Mais il casse elif retype.group (1) == ('' ou None): line = line + 'Type: Ticket \ n' print 'Type de paramètre pour ...' + ligne Attendu que MIS Notes:. *? (// [pewPEW ] //)? semble donner null pour le groupe (1), peu importe quoi. Même chose avec MIS Notes:. *? (// [pewPEW] //) * – AaronG
J'ai évidemment manqué le // suivant dans mon premier exemple dans le dernier commentaire. Vous auriez dû lire, Notes MIS:. *? (// [pewPEW] //) – AaronG