在python中的数字上拆分字符串

时间:2015-11-04 17:45:09

标签: python regex

来自this的跟进问题:

我有字符串

s1 = "Schblaum 12324 tunguska 24 234n"
s2 = "jacarta 331 matchika 22 234k"
s3 = "3239 thingolee 80394 234k"
s4 = "jacarta 3342"

我需要在第一个数字上拆分它们,但如果它在字符串的开头则不需要。结果类似于

["Schblaum", "12324", "tunguska 24 234n"]
["jacarta", "331", "matchika 22 234k"]
["3239 thingolee", "80394", "bb 6238"]
["jacarta", "3342", ""]

链接问题上的正则表达式有效,但它不会在中间数字上分开。此外,如果中间的数字后面没有任何部分,则字符串的其余部分应为空,因为正则表达式将再次返回第一部分。我尝试过使用这个修改

^\S+(\d+.*)\D*\d+|\S.*

但仍然无法正常工作。有什么想法吗?

3 个答案:

答案 0 :(得分:1)

如果没有正则表达式的解决方案可以接受:

<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>

答案 1 :(得分:0)

在re.split中使用maxsplit并查看背后:

s1 = "Schblaum 12324 tunguska 24 234n"
s2 = "jacarta 331 matchika 22 234k"
s3 = "3239 thingolee 80394 234k"
s4 = "jacarta 3342"

import re

for s in (s1, s2, s3, s4):
    print re.split(r'((?<=[a-zA-Z \t])\d+)', s, maxsplit=1)

打印:

['Schblaum ', '12324', ' tunguska 24 234n']
['jacarta ', '331', ' matchika 22 234k']
['3239 thingolee ', '80394', ' 234k']
['jacarta ', '3342', '']

如果要松开前导和尾随空格:

map(str.strip, re.split(r'((?<=[a-zA-Z \t])\d+)', s, maxsplit=1))

答案 2 :(得分:0)

re.split与捕获组进行了很酷的交互,可以让您从拆分中捕获内容。将该事实与其可选的maxsplit参数相结合,可以为您提供一个非常好的解决方案:

re.split('\s(\d+)(?:\s|$)', s1, maxsplit=1)