文字列を取得して0.71331, 52.25378
返したいのですが、0.71331,52.25378
つまり、数字、コンマ、スペース、数字を探して、スペースを取り除きます。
これは私の現在のコードです:
coords = '0.71331, 52.25378'
coord_re = re.sub("(\d), (\d)", "\1,\2", coords)
print coord_re
しかし、これは私に与えます0.7133,2.25378
。私は何が間違っているのですか?
文字列を取得して0.71331, 52.25378
返したいのですが、0.71331,52.25378
つまり、数字、コンマ、スペース、数字を探して、スペースを取り除きます。
これは私の現在のコードです:
coords = '0.71331, 52.25378'
coord_re = re.sub("(\d), (\d)", "\1,\2", coords)
print coord_re
しかし、これは私に与えます0.7133,2.25378
。私は何が間違っているのですか?
coords.replace(' ', '')
回答:
正規表現には生の文字列を使用する必要があります。次のことを試してください。
coord_re = re.sub(r"(\d), (\d)", r"\1,\2", coords)
現在のコードでは、置換文字列のバックスラッシュが数字をエスケープしているため、次と同等のすべての一致を置換していますchr(1) + "," + chr(2)
。
>>> '\1,\2'
'\x01,\x02'
>>> print '\1,\2'
,
>>> print r'\1,\2' # this is what you actually want
\1,\2
文字列に円記号を残したいときはいつでも、r
接頭辞を使用するか、各円記号(\\1,\\2
)をエスケープしてください。
\1
がxCoordと呼ばれる場合re.sub
、サブ文字列をグループ名に置き換えてre.sub(r"(\d), (\d)", r"\1,\2", coords)
、文字列リテラルになるように指示することは可能ですかxCoord,52.25378
\1
すると、奇妙なUnicode文字に置き換えられます。
re.sub(r'(?<=\d), (?=\d)', ',', coords)
。