【问题标题】:Python - Use a Regex to Filter DataPython - 使用正则表达式过滤数据
【发布时间】:2009-08-16 17:08:16
【问题描述】:

是否有一种简单的方法可以从给定字符串中删除与给定正则表达式匹配的所有字符?我知道在 Ruby 中我可以使用 gsub:

>> key = "cd baz ; ls -l"
=> "cd baz ; ls -l"
>> newkey = key.gsub(/[^\w\d]/, "")
=> "cdbazlsl"

Python 中的等效函数是什么?

【问题讨论】:

    标签: python regex


    【解决方案1】:
    import re
    re.sub(pattern, '', s)
    

    Docs

    【讨论】:

    • 这不是只删除第一个匹配项吗?
    【解决方案2】:

    到目前为止,答案都集中在与您的 Ruby 代码做同样的事情上,这与您在问题的英文部分中所问的完全相反:代码删除了匹配的字符,而您的文本询问对于

    删除所有字符的简单方法 从给定的字符串匹配失败

    例如,假设您的 RE 的模式是 r'\d{2,}',“两位或多位数字”——因此不匹配的部分将是所有非数字加上所有单个、孤立的数字。根据您的文本要求删除不匹配的部分也很容易:

    >>> import re
    >>> there = re.compile(r'\d{2,}')
    >>> ''.join(there.findall('123foo7bah45xx9za678'))
    '12345678'
    

    编辑:好的,OP 现在澄清了这个问题(他确实是说他的代码,而不是他的文字,现在文字也是正确的;-)但我要离开回答完整性(建议re.sub 的其他答案对于现在的问题是正确的)。 我意识到您可能是指您在 Ruby 代码中“说”的内容,而不是您在英文文本中说的内容,但是,以防万一,我想我最好完成这组答案!-)

    【讨论】:

    • 啊,是的,你是对的。我更改了问题以与我实际想说的内容相匹配。谢谢!
    【解决方案3】:
    import re
    old = "cd baz ; ls -l"
    regex = r"[^\w\d]" # which is the same as \W btw
    pat = re.compile( regex )
    new = pat.sub('', old )
    

    【讨论】:

      【解决方案4】:

      re.subn()是你的朋友:

      >>> import re
      >>> key = "cd baz ; ls -l"
      >>> re.subn(r'\W', "", key)
      ('cdbazlsl', 6)
      >>> re.subn(r'\W', "", key)[0]
      'cdbazlsl'
      

      返回一个元组。如果您只想要结果字符串,请取第一个元素。或者只是调用 re.sub(),正如 SilentGhost 所说。 (也就是说,他的回答更准确。)

      【讨论】:

      • 为什么调用 subn 然后使用 [0] 而不是只调用更简单的 sub?
      • 我在没有其他人可见时发布了我的答案。后来我发现这不是一个理想的答案。我本可以删除我的答案或对其进行编辑,可能要归功于其他人的想法。您发现回答者在回答不完全正确时会做什么 - 删除或编辑?
      • 经验证据表明,这取决于已经获得了多少赞成票(应得与否!):-(
      【解决方案5】:

      可能是最短的方式:

      In [32]: pattern='[-0-9.]'
         ....: price_str="¥-607.6B"
         ....: ''.join(re.findall(pattern,price_str))
      Out[32]: '-607.6'
      

      【讨论】:

        猜你喜欢
        • 2012-11-15
        • 1970-01-01
        • 2020-03-21
        • 1970-01-01
        • 2021-08-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多