3

「複数の区切り文字で分割されたPython文字列」を使用して文字列を分割しています:

import re
DATA = "Hey, you - what are you doing here!?"
print re.findall(r'\w+', DATA)
# Prints ['Hey', 'you', 'what', 'are', 'you', 'doing', 'here']

一致した単語の間にあるものの別のリストを取得したい:

[", ", " - ", " ", " ", " ", " ", "!?"]

どうすればよいですか?

4

3 に答える 3

5
print re.findall(r'\W+', DATA)  # note, UPPER-case "W"

あなたが探しているリストを生成します:

[', ', ' - ', ' ', ' ', ' ', ' ', '!?']

使用していたキャラクタークラスを否定するの\W+ではなく、使用しました。\w+

   \w  Matches word characters, i.e., letters, digits, and underscores.
   \W  Matches non-word characters, i.e., the negated version of \w

この正規表現リファレンスシートは、正規表現の検索/一致に最適な文字クラス/メタ文字を選択するのに役立つ場合があります。また、詳細については、このチュートリアルを参照してください(特にページ下部の参照セクション)

于 2012-07-18T21:39:24.350 に答える
3

に補完的な正規表現を使用してみ\wませ\Wんか?また、個別のリストを取得する代わりに、一度にすべてを取得する方がおそらく効率的です。(もちろん、それはあなたがそれで何をしようとしているのかにもよりますが。)

>>> re.findall(r'(\w+)(\W+)', DATA)
[('Hey', ', '), ('you', ' - '), ('what', ' '), ('are', ' '), ('you', ' '), ('doing', ' '), ('here', '!?')]

本当に別々のリストが必要な場合は、それを圧縮するだけです。

>>> zip(*re.findall(r'(\w+)(\W+)', DATA))
[('Hey', 'you', 'what', 'are', 'you', 'doing', 'here'), (', ', ' - ', ' ', ' ', ' ', ' ', '!?')]
于 2012-07-18T21:41:23.143 に答える
0

re .split

import re
DATA = "Hey, you - what are you doing here!?"
print re.split(r'\w+', DATA)
#prints ['', ', ', ' - ', ' ', ' ', ' ', ' ', '!?']

空の文字列を除外して、要求したものと正確に一致させることもできます。

于 2012-07-18T21:49:49.770 に答える