2016-12-21 6 views
0

Ich habe eine Frage zu Regex. Angenommen, ich habe diese ZeichenfolgeRegEx. Wie man Leerzeichen nach einem Punkt vor einem Interpunktionszeichen entfernt

"She gained about 55 pounds in...9 months. She was like an eating machine. ”Trump, a man who wants to be president: " 

ich jeden leeren Raum nach Zeit entfernen möchten, und bevor Zeichen“und löschen Zeichen“

Zum Beispiel diesen Teil des Satzes

She was like an eating machine. ”Trump, a man who wants to be president: 

werden sollte
She was like an eating machine.Trump, a man who wants to be president: " 

Danke Jungs, Regex ist nicht einfach zu lernen. Schätze jede Hilfe! bye ps ich verwende Software R, aber ich denke, es ist irrelevant, da regex in jeder Programmiersprache arbeitet

UPDATE

ich mein Problem gelöst, und ich möchte es teilen, vielleicht jemand helfen könnte sonst . Ich habe diesen Datensatz von Kaggle über Trump und Hillary Tweet heruntergeladen.

Ich muss vor dem Import von Daten auf Knime etwas putzen (Projekt an der Universität). Ich habe alle Kodierungsprobleme durch gsub außer diesem gelöst. Ich schaffe es endlich, eine csv-Datei in R mit Encoding UTF-8 zu schreiben. Offenbar las ich diese Datei in KNIME mit der gleichen Codierung

+0

Kann dies helfen könnte: var str = ‚Sie war wie ein Fressmaschine. "Trump, ein Mann, der Präsident sein will: ' str.replace (/ \. \ S"/g, "."); – Nitesh

+0

@Marco, hat meine Antwort für dich funktioniert? –

+0

Ja sorry, es hat auch funktioniert. Ich markiere deine Antwort als die höchst hilfreiche;) –

Antwort

4

Wenn Sie eine beliebige Anzahl von Leerzeichen (1 oder mehr) zwischen einem Punkt und dem geschweiften Anführungszeichen übereinstimmen müssen, können Sie

x <- "She gained about 55 pounds in...9 months. She was like an eating machine. ”Trump, a man who wants to be president: " 
gsub("\\.\\s+”", ".", x) 
## => [1] "She gained about 55 pounds in...9 months. She was like an eating machine.Trump, a man who wants to be president: " 

Die \\. verwenden entspricht einem Punkt, entspricht 1 oder mehr Leerzeichen und entspricht einem .

Siehe die regex demo und eine R demo.

Wenn nur 1 normaler Raum zwischen dem Punkt und dem Zitat ist, können Sie eine feste Schnur Ersatz verwenden:

gsub(". ”", ".", x, fixed=TRUE) 

Siehe this R demo.

1

Kann dies helfen könnte:

var str = 'She was like an eating machine. "Trump, a man who wants to be president. "New value'; 
str.replace(/\.\s"/g,"."); 
0

http://regexr.com/ ist ein großes Werkzeug für das Lernen und reguläre Ausdrücke zu testen.

Das einzige, was ich zu Wiktors Antwort hinzufügen würde ist, dass es nicht "machine.”Trump" entspricht. Um eine beliebige Anzahl von Leerzeichen nach einem Punkt zu entsprechen und vor einem Zitat, verwenden Sie die * quantifier:

x <- "She gained about 55 pounds in...9 months. She was like an eating machine. ”Trump, a man who wants to be president: " 
gsub("\\.\\s*”", ".", x) 
+0

Beachten Sie, dass OP R und Regexr verwendet.com unterstützt nur JS Regex-Geschmack. ZB "[.] [^] *?" 'Funktioniert gut bei regexr, funktioniert aber nicht in R. R basic R verwendet entweder TRE regex flavour (und ich kenne keinen guten Online-Regex-Tester für diesen) oder PCRE (wenn mit 'perl = TRUE' verwendet) - dann ist http://regex101.com eine viel bessere Option. –

+0

Guter Punkt. Https://regex101.com/ im pcre-Modus ist wahrscheinlich eine bessere Wahl für das Lernen von R- kompatible Regex Ihr JS Beispiel kann gemacht werden, um in R zu arbeiten, indem Sie etwas modifizieren und den Perl Modus verwenden: – blongworth

+0

Das '[.] [^] *?" 'ist gleich TRE' [.]. *? "' oder ' (? s) [.]. *? "' in PCRE. –

Verwandte Themen