5

一部のテキストからすべての特殊文字を削除しようとしています。これが私の正規表現です:

pattern = re.compile('[\W_]+', re.UNICODE)
words = str(pattern.sub(' ', words))

非常に単純ですが、残念ながら、アポストロフィ (一重引用符) を使用すると問題が発生します。たとえば、「doesn't」という単語がある場合、このコードは「doesn」を返します。

このような場合にアポストロフィを削除しないように、この正規表現を適応させる方法はありますか?

編集:これが私が求めているものです:

doesn't this mean it -technically- works?

次のようにする必要があります。

これは技術的に機能するという意味ではありませんか

4

4 に答える 4

12

このような?

>>> pattern=re.compile("[^\w']")
>>> pattern.sub(' ', "doesn't it rain today?")
"doesn't it rain today "

アンダースコアも除外する必要がある場合:

>>> re.compile("[^\w']|_").sub(" ","doesn't this _technically_ means it works? naïve I am ...")
"doesn't this  technically  means it works  naïve I am    "
于 2012-07-09T21:44:01.110 に答える
1

この正規表現を使用して、サンプルを単語のリストに解析できました: [a-z]*'?[a-z]+.

次に、リストの要素をスペースで結合するだけです。

于 2012-07-09T21:43:10.260 に答える
0

どうですか

re.sub(r"[^\w' ]", "", "doesn't this mean it -technically- works?")
于 2012-07-09T21:44:35.570 に答える
0

どう([^\w']|_)+ですか?

これは、次のような場合にはうまく機能しないことに注意してください。

doesn't this mean it 'technically' works?

これは、まさにあなたが求めているものではないかもしれません。

于 2012-07-09T21:44:36.690 に答える