次のような文字列があるとします"(hello) (yes) (yo diddly)"
。
次のようなリストが必要です。["hello", "yes", "yo diddly"]
Pythonでこれをどのように行いますか?
私はこのようにします:
"(hello) (yes) (yo diddly)"[1:-1].split(") (")
まず、最初と最後の文字を切り取ります(とにかく削除する必要があるため)。次に、区切り文字として「)(」を使用して結果の文字列を分割し、目的のリストを作成します。
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'\((.+?)\)')
これにより、任意の文字列から単語が得られます。
>>> s="(hello) (yes) (yo diddly)"
>>> import re
>>> words = re.findall(r'\((.*?\))',s)
>>> words
['hello', 'yes', 'yo diddly']
DSMが言ったように。
?
正規表現で貪欲でないようにします。