来自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.*
但仍然无法正常工作。有什么想法吗?
答案 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)