5

次のような文字列があるとします"(hello) (yes) (yo diddly)"

次のようなリストが必要です。["hello", "yes", "yo diddly"]

Pythonでこれをどのように行いますか?

4

3 に答える 3

11

私はこのようにします:

"(hello) (yes) (yo diddly)"[1:-1].split(") (")

まず、最初と最後の文字を切り取ります(とにかく削除する必要があるため)。次に、区切り文字として「)(」を使用して結果の文字列を分割し、目的のリストを作成します。

于 2012-09-01T20:39:58.157 に答える
11
import re
pattern = re.compile(r'\(([^)]*)\)')

パターンは文字列()の括弧と一致し、\(...\)これらはエスケープする必要があります。
次に、サブグループ()を定義し(...)ます。これらの括弧は正規表現構文の一部です。サブグループは、右括弧( )
を除くすべての文字に一致します[^)]*

s = "(hello) (yes) (yo diddly)"
pattern.findall(s)

与える

['hello', 'yes', 'yo diddly']

UPDATE:
It is probably better to use [^)]+ instead of [^)]*. The latter would also match an empty string.

Using the non-greedy modifiers, as DSM suggested, makes the pattern probably better to read: pattern = re.compile(r'\((.+?)\)')

于 2012-09-01T20:59:50.710 に答える
4

これにより、任意の文字列から単語が得られます。

>>> s="(hello) (yes) (yo diddly)"
>>> import re
>>> words = re.findall(r'\((.*?\))',s)
>>> words
['hello', 'yes', 'yo diddly']

DSMが言ったように。

?正規表現で貪欲でないようにします。

于 2012-09-01T20:45:01.953 に答える