【问题标题】:Remove digits from a string and all connecting characters从字符串中删除数字和所有连接字符
【发布时间】:2021-06-16 22:52:45
【问题描述】:

对于我的问题的第一部分,我已经看到了许多解决方案,例如使用:

name = 'Example 01 string 1a%'
new_name = ''.join(i for i in name if not i.isdigit())
print(new_name)
>> 'Example  string a%'

但是我希望输出也用一个空格替换 2+ 个相邻空格,以及连接到已删除数字的任何字符(不包括空格),因此我期望在此示例中的结果是:

>> 'Example string'

我知道要删除例如双空格,您可以简单地使用:

new_name.replace('  ', ' ')

但这仅适用于双空格。我不确定如何将其扩展到任意数量,以防字符串包含多组数字,这些数字将被删除并留下大量空间。

所以我的问题是,如何清理字符串以删除数字和连接到这些数字的任何字符(不包括空格),然后用单个空格替换任何大组空格?

【问题讨论】:

    标签: python python-3.x string replace split


    【解决方案1】:

    实现此目的的一种方法是通过内置的re 库使用正则表达式。

    基本上,exp 提取两个或多个相邻字母并将结果返回到一个列表中,该列表使用您当前使用的join 函数转换为字符串。

    这个精确 方法的注意事项是搜索字符串的长度必须至少为两个字母字符。但是,如果您想增强表达式,正则表达式具有 look-arounds

    import re
    
    name = 'Example 01 string 1a%'
    exp = '([a-zA-Z]{2,})'
    
    ' '.join(re.findall(exp, name))
    

    输出:

    >>> 'Example string'
    

    【讨论】:

    • 很好的答案,谢谢!我必须阅读正则表达式才能更好地理解它,但这是一个比我想出的更干净的解决方案!
    • 我的荣幸;很高兴听到它对你有用。正则表达式是一种非常有用的迷你语言 - 强烈推荐。
    猜你喜欢
    • 1970-01-01
    • 2013-04-30
    • 1970-01-01
    • 2016-09-16
    • 2011-10-19
    • 1970-01-01
    • 2010-11-04
    • 2010-12-04
    • 2010-11-17
    相关资源
    最近更新 更多