【问题标题】:Python: Strip everything but spaces and alphanumericPython:去除空格和字母数字以外的所有内容
【发布时间】:2011-02-16 07:00:18
【问题描述】:

我有一个带有括号和逗号等的大字符串。我想去掉所有这些字符但保持间距。我怎样才能做到这一点。目前我正在使用

strippedList = re.sub(r'\W+', '', origList)

【问题讨论】:

  • 为什么您对当前的解决方案不满意?
  • 啊,我只需要将 '' 更改为 ' '。失败谢谢男人

标签: python


【解决方案1】:
re.sub(r'([^\s\w]|_)+', '', origList)

【讨论】:

  • 就像一个注释,'|_' 会减慢你的正则表达式。 (当然,如果输入很小也没关系。)
  • @Ignacio,|_ 在这里做什么?
  • @chandresh:撤消^\w 中的排除。
  • 我想我每周至少来一次这个答案。
【解决方案2】:

更快一点的实现:

import re

pattern = re.compile('([^\s\w]|_)+')
strippedList = pattern.sub('', value)

【讨论】:

    【解决方案3】:

    基于正则表达式的版本可能更快(特别是如果您切换到使用编译表达式),但为了清楚起见,我喜欢这样:

    "".join([c for c in origList if c in string.letters or c in string.whitespace])
    

    join() 调用有点奇怪,但我认为这是非常惯用的 Python 将字符列表转换为字符串。

    【讨论】:

      【解决方案4】:

      演示您将在结果中得到哪些字符:

      >>> s = ''.join(chr(i) for i in range(256)) # all possible bytes
      >>> re.sub(r'[^\s\w_]+','',s) # What will remain
      '\t\n\x0b\x0c\r 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz'
      

      文档:re.subRegex HOWTO: Matching CharactersRegex HOWTO: Repeating Things

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-05-07
        • 1970-01-01
        • 2017-08-26
        • 2014-03-01
        • 2016-04-02
        • 2015-05-08
        • 1970-01-01
        • 2013-01-16
        相关资源
        最近更新 更多