2

文字列があるとしましょう (クリスマス プレゼントのリストなど)。

presents = 'iPods, Windows 8, .hack//Sign boxset , red shoes    , Wall-E DVD,  Deus Ex: Human Revolution        '

コンマ区切りの項目はすべて任意で、数字、句読点、または特殊文字 (コンマを除く) を含めることができます。Python を使用してこれらのアイテムの配列を取得したいと考えています。

presents_arr = ['iPods', 'Windows 8', '.hack//Sign boxset', 'red shoes', 'Wall-E DVD', 'Deus Ex: Human Revolution']

私は通常、コンマ区切り文字で文字列を分割し、分割で各文字列をクリーンアップすることでこれを行います。

presents = presents.split(',')
presents = [present.strip() for present in presents]

私たちの好奇心は、特に re.findall でこれを行うことができますか? スプリット/ストリップとまったく同じ動作が必要です。

4

3 に答える 3

2

直訳すると次のようになります。

presents = [x.strip() for x in re.findall(r'[^,]*', presents) if x]

改善は、コンマで囲まれた空白で分割することです:

presents = re.split(r'\s*,\s*', presents)

ただし、この場合はどちらも行わないでください。以下の明確さを改善する方法はまったくありません。

presents = presents.split(',')

また、単純な分割よりもパフォーマンスが低下する場合もあります。

于 2012-12-20T00:53:37.203 に答える
0

を検索できます。[^,]*これは、 で分割したものと同じ,です。ただし、より良い方法は分割することです-その方法では、その部分\s*,\s*は必要ありません。これは、 . (実際には、可変長の負の後読みが必要なため、まったくできないと思います。)stripfindall

于 2012-12-20T00:53:14.553 に答える
0
re.findall(r'[^,\s]+', presents)
于 2012-12-20T00:59:15.717 に答える