7

Pythonを除いて、この質問の解決策が必要です! Pythonの正規表現でPOSIX式を使用できるように見えるように、Python用の正規表現ライブラリをインストールしようとしましたが、それでも[:alpha:]クラスにUnicode文字が含まれていないと思います。例えば:

>>> re.search(r'[[:alpha:] ]+','Please work blåbær and NOW stop 123').group(0)
'Please work bl'

合わせたいときPlease work blåbær and NOW stop

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

編集2:私は次のことを試しました:

>>> re.search(re.compile('[\w ]+', re.UNICODE),'Please work blåbær and NOW stop 123').group(0)
'Please work bl\xc3'

私が望んでいたものとはまったく異なります(最初の非ASCII文字の後の部分も一致させたいです)が、少なくとも以前よりも文字に一致しました。残りの必要なものと一致させるには、ここで何をすべきですか?

編集 3:「単語」以外の文字と一致させたくありません。「単語」とは、az、AZ、スペース、およびアクセント付きの単語文字のバリエーションを意味します。私の考えが伝わったと思います。のようなフレーズで

lets match força, but stop before that comma

だけ合わせたいlets match força

編集 4:だから私はこの 1 つのスクリプトのためだけに Python 3 を使用しようとしました:

>>> re.search(re.compile('[\w ]+', re.UNICODE),'lets match força, but stop before that comma').group(0)
'lets match força'

Python 3 ではほとんどの部分で機能すると思いますが、数字 (これは絶対に望んでいません) とアンダースコアにも一致します。Python 2または3でこれを修正する方法はありますか?

4

1 に答える 1

2

使用しているPythonのバージョンが明確ではありません。2.xを使用している場合は、Unicodeの問題が発生している可能性があります。詳細については、この投稿を参照してください。質問を更新して、さらに詳しく説明してください。

アクセント付き文字を適切なUnicode表現に変換できないことに非常に驚いています...

ただし、回避策があります。

re.search(re.compile('((\w+\s)|(\w+\W+\w+\s))+', re.UNICODE), ur'Please work blåbær and NOW stop 123').group(0)

また

re.search(re.compile('\D+', re.UNICODE), ur'Please work blåbær and NOW stop 123').group(0)
于 2012-11-07T01:15:07.783 に答える