【问题标题】:Python regex: replace strings in list [duplicate]Python正则表达式:替换列表中的字符串[重复]
【发布时间】:2015-01-08 11:40:48
【问题描述】:

从中获得的最佳方法是什么:

['\n    62\n    ', '\n    178\n    ', '\n    7,800\n    ']

...Python 中的这个?

['62', '178', '7,800']

我正在尝试从字符串中删除所有非字母数字字符,如下所示,

import re
re.sub(r'\W+', '', my_string)

...但带有列表/数组。

【问题讨论】:

  • @Eric:谢谢。我认为这必须是一个重复,但我找不到一个对这个 OP 有意义的问题。那个是完美的。

标签: python arrays regex list


【解决方案1】:

这就是str.strip([chars]) 的用途! str.strip 返回删除了前导和尾随字符的字符串的副本。 chars 参数是一个字符串,指定要删除的字符集。如果省略或 None,chars 参数默认删除 whitespace

>>> l=['\n    62\n    ', '\n    178\n    ', '\n    7,800\n    ']
>>> [i.strip() for i in l]
['62', '178', '7,800']

【讨论】:

  • @downvoter 请告诉社区和我投反对票的原因,以改进我的答案!
  • 为什么这被否决了?效果很好。
  • @octosquidopus 和你一样我很惊讶等待原因!
  • @octosquidopus 我认为这是您问题的pythonc答案!所以如果你觉得这个问题有帮助,你可以通过投票告诉社区或接受答案!
【解决方案2】:

如果您想对可迭代的每个成员(例如列表)运行函数,可以通过三种方式执行此操作:显式 for 语句、对 map 函数的调用或 comprehension .

理解如下所示:

my_new_strings = [re.sub(r'\W+', '', my_string) for my_string in my_strings]

但是,即使您阅读了上面的教程部分,除非您首先考虑如何使用显式循环编写它,否则这可能没有意义:

my_new_strings = []
for my_string in my_strings:
    my_new_string.append(re.sub(r'\W', '', my_string))

理解基本上是这种模式的浓缩。它们很好,因为它们消除了一些样板文件(这会妨碍阅读代码,并在编写代码时提供更多出错的地方),可以在表达式中间使用,并且速度更快。但最终,他们会做同样的事情。

【讨论】:

    【解决方案3】:
    >>> x=['\n    62\n    ', '\n    178\n    ', '\n    7,800\n    ']
    >>> [re.sub('\W+','',i) for i in x ]
    ['62', '178', '7800']
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-09
      • 1970-01-01
      • 2022-11-07
      • 2019-02-19
      • 2023-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多