0

ここで複数のソリューションを試しましたが、一部のコードは削除されていますが、複数の句読点では機能していないようです。"[ または ', このコード:

regex = re.compile('[%s]' % re.escape(string.punctuation))
    for i in words:
        while regex.match(i):
            regex.sub('', i)

私が得たもの: Python で文字列から句読点を取り除く最良の方法は良かったのですが、それでも二重句読点で問題が発生します。複数の句読点を削除するために各単語を繰り返し処理することを期待してループを追加しましWhileたが、それは機能しないようで、最初の項目 "[ でスタックして終了しません

私も気づいていないという明らかな部分が欠けているだけですか?

冗長性を追加してリストを二重にループすることで問題を解決しました。かなり大きなセットがあるため、これには非常に長い時間がかかります(数分にもなります)

私はPython 2.7を使用しています

4

3 に答える 3

3

文字列の先頭または完全な文字列を一致させるregex.match必要があるため、コードは機能しません。

また、 の戻り値に対して何もしていませんregex.sub()subその場では機能しませんが、その結果を何かに割り当てる必要があります。

regex.searchパターンが文字列のどこかにあり、期待どおりに機能する場合、一致を返します。

import re
import string

words = ['a.bc,,', 'cdd,gf.f.d,fe']

regex = re.compile('[%s]' % re.escape(string.punctuation))
for i in words:
    while regex.search(i):
        i = regex.sub('', i)
    print i

編集: 以下で @senderle が指摘したように、while 句は不要であり、完全に省略できます。

于 2012-09-11T18:38:26.617 に答える
2

これにより、英数字以外のすべてが置き換えられます...

re.sub("[^a-zA-Z0-9 ]","",my_text)


>>> re.sub("[^a-zA-Z0-9 ]","","A [Black. Cat' On a Hot , tin roof!")
'A Black Cat On a Hot  tin roof'
于 2012-09-11T18:10:02.513 に答える
0

簡単な方法は次のとおりです。

>>> print str.translate("My&& Dog's {{{%!@#%!@#$L&&&ove Sal*mon", None,'~`!@#$%^&*()_+=-[]\|}{;:/><,.?\"\'')
>>> My Dogs Love Salmon

この str.translate 関数を使用すると、句読点が削除されます。私は通常これを使用して、DNA シーケンスの読み取りから数字を削除します。

于 2012-09-11T19:44:00.073 に答える