Ich möchte die Zeichenfolge nehmen 0.71331, 52.25378
und zurückkehren 0.71331,52.25378
- dh nur nach einer Ziffer, einem Komma, einem Leerzeichen und einer Ziffer suchen und das Leerzeichen entfernen.
Dies ist mein aktueller Code:
coords = '0.71331, 52.25378'
coord_re = re.sub("(\d), (\d)", "\1,\2", coords)
print coord_re
Aber das gibt mir 0.7133,2.25378
. Was mache ich falsch?
re.sub(r'(?<=\d), (?=\d)', ',', coords)
.coords.replace(' ', '')
Antworten:
Sie sollten rohe Zeichenfolgen für Regex verwenden. Versuchen Sie Folgendes:
coord_re = re.sub(r"(\d), (\d)", r"\1,\2", coords)
Mit Ihrem aktuellen Code werden die Backslashes in Ihrer Ersatzzeichenfolge nicht in den Ziffern angezeigt, sodass Sie alle Übereinstimmungen ersetzen, die den folgenden Angaben entsprechen
chr(1) + "," + chr(2)
:>>> '\1,\2' '\x01,\x02' >>> print '\1,\2' , >>> print r'\1,\2' # this is what you actually want \1,\2
Wenn Sie den Backslash in der Zeichenfolge belassen möchten, verwenden Sie das
r
Präfix oder maskieren Sie jeden Backslash (\\1,\\2
).quelle
\1
heißt , ist es möglich, die Unterzeichenfolgen durch Gruppennamen zu ersetzen, die zum Zeichenfolgenliteral führtenre.sub
re.sub(r"(\d), (\d)", r"\1,\2", coords)
xCoord,52.25378
\1
ersetzt es durch ein bizarres Unicode-Zeichen.Python interpretiert das
\1
als Zeichen mit dem ASCII-Wert 1 und übergibt es ansub
.Verwenden Sie rohe Zeichenfolgen, in denen Python das nicht interpretiert
\
.coord_re = re.sub(r"(\d), (\d)", r"\1,\2", coords)
Dies wird gleich zu Beginn der
re
Dokumentation behandelt , falls Sie weitere Informationen benötigen.quelle