2017-07-26 3 views
3

Ich möchte Python Regex schreiben, die eine Reihe von Muster nimmt:Python Regex: Warum akzeptiert Python mein Muster nicht?

"u'Johns Place‘,"

und kehrt:

Johns Place

Es sollte das Zeichen 'u' finden, der Apostroph kommt danach und dann der Apostroph, der vor dem c kommt omma und gibt zurück, was zwischen diesen beiden Apostrophen ist.

Deshalb habe ich den folgenden Code geschrieben:

title = "u'Johns's Place'," 
print re.sub(r"u'([^\"']*)',", r"\"\1\"", title) 

aber ich habe noch die gesamte Zeichenfolge

"u'Johns Place‘,"

ohne Filterung .

Wissen Sie, wie es gelöst werden kann?

+4

Ich bin misstrauisch über die 'u 'in der Zeichenfolge Wie erhältst du diese Zeichenfolge? – idjaw

+0

eigentlich soll dieses 'du' 'unicode' erwähnen – CrazySynthax

+4

Ja, genau deswegen bin ich misstrauisch. Ich denke, du solltest erklären * wie * du diese Saite bekommst, weil sie wie ein XY-Problem riecht. – idjaw

Antwort

7

Python akzeptiert Ihr Muster nicht wegen der Mitte ' in "John's". Es folgt kein Komma, wie in Ihrem Muster beschrieben. Der Abgleich kann nicht weiter nach ', suchen, da Sie nur Zeichen zulassen, die nicht " oder ' mit [^\"']* sind.

Wenn Sie JSON mit Python syntaktisch analysieren möchten, verwenden Sie json Paket, nicht Regexen angewandt auf Escape-Unicode-Strings.

+0

OK. Aber es gibt ein Komma nach Place '. Also erwarte ich, dass Python das Komma in Johns ignoriert und das Komma nach "Place" fängt. – CrazySynthax

+1

@CrazySynthax: Das Matching kann nicht fortgesetzt werden, Sie verbieten es mit '[^ \" '] * '. –

2

ich Python nicht viel verwenden, aber diese regex sollte Ihr Problem

^u'(.*)',$ 

von Anfang an passen die u und Apostroph, erfassen alles danach, bis das Apostroph und Komma am Ende

lösen
print re.sub(r"^u'(.*)',$", r"\"\1\"", title) 

entfernen^und $, wenn es mehr auf die Zeichenfolge als die ersetzt (in anderen Worten, wenn es einen Zusammenhang)

0

nach einer größeren Forschung machen fand ich th ist Paket https://simplejson.readthedocs.io/en/latest/

Es kann Sie lesen eine JSON-Datei ohne setzen Sie '..' für jede Zeichenfolge.

import simplejson as json 
import requests 

response_json = requests.get(<url-address>) 
current_json = json.loads(response_json.content) 

current_json nicht den Charakter haben 'u' am beginnig jeder Saite.

Es ist meine Frage beantwortet teilweise, weil sie Schlüssel und Werte zurückgibt, die von einem einzelnen Anführungszeichen abgegrenzt sind (') und nicht durch Anführungszeichen ("), wie es im JSON-Format benötigt wird.