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']

我通常会用逗号分隔符分割字符串,然后用 split 清理每个字符串。

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

您可以搜索[^,]*,这将相当于您的 split by ,。但是,更好的方法是拆分\s*,\s*- 这样您就不需要strip零件,这不是您可以轻松做到的事情findall。(实际上,我相信你根本做不到,因为需要可变长度的负后视。)

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