0

句読点の前のスペースをこれに置き換えています-機能しますが-非常に洗練されていないコード:

my_string = "There , are , many , wrong . spaces , before interpunction  marks !"

my_string.replace(" ,", ",").replace(" .", ".").replace(" !", "!").replace(" ?", "?")

ここで、より洗練された解決策、つまり正規表現を考え出そうとしました。しかし、私が得たのは次のとおりです。

import re
my_string = re.sub(r"[\s]+[,.!?]", XXX, my_string)

XXXwhitespace+markをそれぞれを対応するに置き換える方法がわかりませんmark。または、すべてのマークの前に各空白を単純に削除する方法-それも機能します...

4

4 に答える 4

2

句読点のキャプチャ グループを作成し、置換式でそのグループを参照します。

re.sub(r'\s+([,.!?])', r'\1', my_string)

\s;を括弧で囲む必要はありません。それはすでに文字クラスです。

デモンストレーション:

>>> import re
>>> my_string = "There , are , many , wrong . spaces , before interpunction  marks !"
>>> re.sub(r'\s+([,.!?])', r'\1', my_string)
'There, are, many, wrong. spaces, before interpunction  marks!'
于 2013-04-16T08:45:59.550 に答える
1

括弧を使用して句読点をキャプチャし、次を使用して参照する必要があります\1

import re
my_string = "There , are , many , wrong . spaces , before interpunction  marks !"
my_string = re.sub(r"[\s]+([,.!?])", r"\1", my_string)
print my_string  # There, are, many, wrong. spaces, before interpunction  marks!
于 2013-04-16T08:47:49.253 に答える
0

キャプチャ グループを追加します。

[\s]+([,.!?])

次に、置換で使用します。

\1

\n は n 番目のキャプチャ グループを参照し、\0 は一致全体を参照します。

于 2013-04-16T08:45:59.277 に答える