【问题标题】:re.findall - Getting a list of items from a comma delimited stringre.findall - 从逗号分隔的字符串中获取项目列表
【发布时间】:2012-12-20 00:50:12
【问题描述】:

假设你有一个字符串(比如一份圣诞礼物清单)。

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 专门做这个吗?我需要与拆分/剥离相同的行为。

【问题讨论】:

    标签: python regex


    【解决方案1】:

    直接翻译是这样的:

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

    一个改进是在空格包围的逗号上拆分:

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

    请不要在这种情况下执行上述任何一项操作。根本没有办法改善以下内容的清晰度:

    presents = presents.split(',')
    

    在这种情况下,性能也会比简单的拆分差。

    【讨论】:

      【解决方案2】:

      你可以搜索[^,]*,它相当于你被,分割。但是,更好的方法是用\s*,\s* 分割——这样你就不需要strip 部分,这不是你可以用findall 轻易做到的。 (实际上,我相信你根本做不到,因为需要可变长度的负后视。)

      【讨论】:

        【解决方案3】:
        re.findall(r'[^,\s]+', presents)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-09-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-01-30
          • 2019-05-08
          相关资源
          最近更新 更多