python字符串拆分

Her*_*ery 7 python string split

我有一个像这样的输入字符串:a1b2c30d40我想将字符串标记为:a, 1, b, 2, c, 30, d, 40.

我知道我可以逐个读取每个字符并跟踪前一个字符以确定我是否应该对它进行标记(连续两位数表示不对其进行标记)但是有更多的pythonic方法吗?

Cat*_*lus 13

>>> re.split(r'(\d+)', 'a1b2c30d40')
['a', '1', 'b', '2', 'c', '30', 'd', '40', '']
Run Code Online (Sandbox Code Playgroud)

在模式上:正如评论所说,\d意思是"匹配一个数字",+是一个修饰符,意思是"匹配一个或多个",所以\d+意味着"匹配尽可能多的数字".这被放入一个组中(),因此上下文中的整个模式re.split意味着"使用尽可能多的数字作为分隔符来分割此字符串,另外将匹配的分隔符捕获到结果中".如果你省略了这个小组,你就会得到['a', 'b', 'c', 'd', ''].

  • @Piotr:我知道......但我认为你的答案对于原始字符串会更有启发性有两个原因:1)根据我的经验,如果转义代码无效,Python在字符串中留下反斜杠的事实通常会令人惊讶:open("c:\ zer\woob.dat")工作和打开("c:\ temp\buf.dat")没有2)有比\ t和\n更具特色的字符,特别是'\ b'是其中之一,而r'\ b'对于正则表达式来说是特殊的.通过使用那种花哨的`r'(\ d +)'`读者可能会花时间阅读逃避问题... (4认同)
  • +1:但我认为最好使用原始字符串作为正则表达式 (2认同)