2017-05-05 3 views
0

Ich habe ein PDF-Dokument in eine Datei konvertiert, indem Sie pdftotext -raw /path/to/pdf.pdf /path/to/output.txt in Ubuntu verwenden. Ich lese die konvertierte Datei mit sample = open("/path/to/output.txt").read(). Jetzt hat Sample undecodierte Unicode-Strings wie \xe2\x80\x99. Ich möchte sie mit Regex mit '' ersetzen. Ich benutzte die Muster re.sub(r"""\\\\"""," ",sample),re.sub(r'\\x..',"",sample),re.sub(r'\\\\x..'," ",sample)ersetze Unicode-Strings mit re

Zum Beispiel nehmen diese

abc="[email protected]\n\x0c" 
re.sub(r'\\x..',"",abc) 
re.sub(r'\\\\x..'," ",abc) 
abc.encode("ascii","ignore") 

I \\x.. Muster using this online regex tester Wahl Sprache wie Python ausgewertet also this und verwendet \\\\x.. Muster basierend auf Referenz von this SO Question's answer aber beide gibt mir [email protected]\n\x0c als Ausgabe. Es entfernt diese Unicode-Zeichenfolgen nicht. Ich möchte das Muster \\\w.. nicht verwenden, da es Escape-Sequenzen auswählen kann. Sogar ich habe abc.encode ('utf8') versucht, die UnicodeDecodeError wirft. Ich verstehe, dass das Problem ist, weil \x?? als Zeichenfolge gelesen wird, aber ich weiß nicht, wie man das behebt.

Wenn Sie Tests mit den Lösungen ausgeführt werden soll bitte diese verwenden:

182\nWheel of Life, 24\xe2\x80\x9325, 135\xe2\x80\x93136 
\n194\xe2\x80\x93195 
CTI\xe2\x80\x99s\ntraining enables participants 
80\xe2\x80\x9383 

Die erwartete Ausgabe dieser Test Strings sein sollte

182\nWheel of Life, 2425, 135136 
\n194195 
CTIs\ntraining enables participants 
8083 

Hinweis:

I‘ habe auch versucht

abc=abc.decode("utf-8") 
abc=abc.encode("ascii","ignore") 

entfernt diese gewissen Charakter, aber immer noch kann ich ein paar Strings wie \x0c sehen, die Formularvorschub ist so möchte ich nur regex Weg, um diese Zeichenfolgen zu ersetzen.

Versuchte reguläre Ausdrücke:

abc="[email protected]\x0c\xc0ecoaches.com\n\x0c" #input 

re.sub(r'[\\x[a-fA-F0-7]-\\x[a-fA-F0-7]]+',' ',abc) 
re.sub(r'[^\x00-\x7F]+',' ',abc) 
re.sub(r'\\x..',"",abc) 
re.sub(r'\\\\x..'," ",abc) 

fügen Sie bitte Gründe für downvoting. als Es hilft mir, meine Fehler zu verstehen. Das Problem kann einfach sein, aber eine Lösung ist erforderlich. Ich habe so viele Untersuchungen gemacht und Experimente vor Entsendung es hier, ich hoffe, die Menschen ‚ll Wert ihnen

Antwort

0

Gefunden die die Zeichen beheben reicht von \x00-\x7f alle Zeichen Tastatur enthält daher re.sub(r'[^\x00-\x7f]+','', abc) alle Zeichen ersetzt und das Ergebnis ist ''

Nicht - Druckbare Zeichen wie \f\v werden vom Python-Interpreter als \x0c\x0b erkannt, wobei andere nicht druckbare Zeichen erkannt werden, wie es zB ist: \n\r\b wird als \n\r\b erkannt.Um daher nur \x0c\x0b zu ersetzen, die ist \f\v, aber andere Escape-Sequenzen und Zeichen würde der reguläre Ausdruck auch

Die Regex vom ersetzt String und andere nicht druckbare Zeichen ersetzt \x0b,\x0c erhalten bleiben arbeitet re.sub(r'[\x0b-\x0c]','',(re.sub(r'[^\x00-\x7f]+','', abc))) oder re.sub(r'[^\x00-\x7f]+','', abc).replace("\f","").replace("\v","") zu überspringen. Dies wird auch von str.replace()\f and \v

Nur diese beiden Zeichen unterscheiden sich in der Erkennung durch Python, da nur diese die Funktionalität der anderen zwei Escape-Sequenzen kombiniert.

Beispiel:

\f ==> \n+\r 
\v ==> \n+\t