【问题标题】:how to use python re.split to split string but keep digits?如何使用 python re.split 拆分字符串但保留数字?
【发布时间】:2018-01-31 17:42:31
【问题描述】:

我是一名 Python 学习者。我想使用 python re.split() 将字符串拆分为单个字符,但我不想拆分数字。

Example: s = "100,[+split"
The result should be ["100", ",", "[", "+", "s", "p", "l", "i", "t"]

我尝试使用re.split(r'[A-Za-z]+|\d+', s)re.findall(r'[0-9]+]|\d+', s),但我真的不擅长使用这些方法。有人能帮我吗?非常感谢。

【问题讨论】:

    标签: python string split digits


    【解决方案1】:

    你可以使用re.findall:

    import re
    s = "100,[+split" 
    new_s = re.findall('\d+|[a-zA-Z\W]', s)
    

    输出:

    ['100', ',', '[', '+', 's', 'p', 'l', 'i', 't']
    

    【讨论】:

    • 谢谢Ajax1234!所以它应该使用findall而不是split。我的新技能!
    【解决方案2】:
    [re.search('\d*', s).group()] + [val for val in s if not val.isdigit()]
    

    这将为您提供此特定字符串所需的输出,但如果不了解您期望的字符串类型的更多信息,很难说它是否适用于所有情况。

    这是通过在字符串中搜索数字,然后将所有非数字字符的列表添加到其中来实现的。

    输出是:

     ['100', ',', '[', '+', 's', 'p', 'l', 'i', 't']
    

    【讨论】:

    • emmmm...是的,我已经看到您的解决方案是将数字与非数字连接起来。但我对 [re.search('\d*', s).group()] 有点困惑,它似乎只找出第一个数字。假设现在我们的 s="100,[+spli25t3",结果还是和我们之前的输出一样。另外,如果我们成功地找到了几个数字,也许连接方法 '+' 会改变所有字符的顺序。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-23
    • 1970-01-01
    • 2016-08-07
    • 1970-01-01
    • 2010-09-21
    相关资源
    最近更新 更多