re.findall - 从逗号分隔的字符串中获取项目列表

时间:2012-12-20 00:50:13

标签: python regex

假设你有一个字符串(比如圣诞礼物列表)。

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专门做这个吗?我需要与split / strip完全相同的行为。

3 个答案:

答案 0 :(得分:2)

直接翻译类似于:

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

改进之处在于用逗号分隔空格:

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

请不要在这种情况下执行其中任何一项。没有办法改善清晰度:

presents = presents.split(',')

并且在表现将比简单拆分更差的情况下。

答案 1 :(得分:0)

您可以搜索[^,]*,这相当于您按,分割。但是,更好的方法是按\s*,\s*分割 - 这样您就不需要strip部分,而这不是您可以轻松使用findall进行的操作。 (实际上,由于需要可变长度的负面观察,我相信你完全不能这样做。)

答案 2 :(得分:0)

re.findall(r'[^,\s]+', presents)