【问题标题】:How to split a string (using regex?) depending on digit/ not digit如何根据数字/非数字拆分字符串(使用正则表达式?)
【发布时间】:2010-11-18 19:02:15
【问题描述】:

我想在 python 中将一个字符串拆分为一个列表,具体取决于数字/非数字。 例如,

5 55+6+  5/

应该返回

['5','55','+','6','+','5','/']

目前我有一些代码循环遍历字符串中的字符并使用 re.match("\d") 或 ("\D") 对其进行测试。我想知道是否有更好的方法来做到这一点。

P.S:必须兼容python 2.4

【问题讨论】:

  • 是的,差不多。这是一个反向波兰符号计算器,所以我不能假设字符之间总是有空格(直到现在我才知道我想做的事情有一个名字。谢谢你告诉我)。

标签: python regex string tokenize


【解决方案1】:

假设需要匹配 6 到 5 之间的 +(您缺少),

>>> import re
>>> s = '5 55+6+ 5/'
>>> re.findall(r'\d+|[^\d\s]+', s)
['5', '55', '+', '6', '+', '5', '/']

【讨论】:

  • 很好的模式,但似乎你不妨使用 findall。您也不需要模式中的尾随\s*,但这也没有什么坏处。 +1
  • 谢谢! re.findall 正是我想要的。最后使用“[ ]+|\d+|^\d”(需要多个连续的数字在一起,但非数字分开)。
【解决方案2】:

这是最简单的一个:)

re.findall('\d+|[^\d]+','134aaaaa')

【讨论】:

    【解决方案3】:

    使用findallfinditer

    >>> re.findall(r'\d+|[^\s\d]+', '5 55+6+ 5/')
    ['5', '55', '+', '6', '+', '5', '/']
    

    【讨论】:

      【解决方案4】:

      如果顺序无关紧要,您可以进行 2 次拆分:

      re.split('\D+', mystring)
      
      re.split('\d+', mystring)
      

      但是,根据您的输入,它看起来可能是数学上的……在这种情况下,顺序很重要。 :)

      您最好使用re.findall,就像其他答案之一一样。

      【讨论】:

      • 是的,它用于逆波兰符号计算器 - 顺序绝对重要!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-06-14
      • 1970-01-01
      • 2022-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多