需要一些Python字符串/切片操作的帮助
这是一个非常基础的问题,我可能会因此被投反对票,但老实说,我在谷歌上搜索了至少一个小时也没找到答案。我学会了如何根据“确切位置”来切割字符串,也就是说你必须知道每个单词的结束位置。但我没有找到任何文章解释如何处理那些“动态”的字符串,也就是那些可能会变化的字符串。
而且在这种情况下,我不想使用string.split(),因为这对我来说有点过于复杂。
我基本上有一个这样的字符串:
myString = "!save python Python is a high-level object oriented language created by Guido van Rossum."
# the format is !save [singleword] [definition]
我需要“切割”这个字符串,但我找不到合适的方法来做到这一点。
我需要把标题(在这个例子中是python)和这个字符串的定义保存到一个变量里。类似于:
title = myString[1]
definition = myString[everything after string[1]
我不太确定在处理一个动态字符串时,如何知道每个单词的结束位置。
如果能给我一些关于应该阅读哪些函数或方法的建议,我将非常感激。谢谢!
3 个回答
1
选中的答案(经过PEP8规范化后):
verb, title, definition = my_string.split(' ', 2)
这个方法是用一个空格来分割。其实更好的做法是根据连续的空白字符来分割,这样可以处理标题两边可能有的制表符或多个空格:
verb, title, definition = my_string.split(None, 2)
另外,建议在定义中也规范化空白字符:
definition = ' '.join(definition.split())
2
如果你的命令、标题和定义之间有空格,你可以:
wordList = myString.split()
cmd = wordList[0] # !save
title = wordList[1] # python
definition = ' '.join(wordList[2:]) # Python is a high-level object oriented language created by Guido van Rossum.
如果你真的不想使用分割(split),你可以使用正则表达式:
import re
m = re.match('(/S+)/s*(/S+)/s*(.*)')
cmd = m.group(1)
title = m.group(2)
definition = m.group(3)
12
为什么使用split会显得过于复杂呢?
verb, title, definition = myString.split (' ', 2)