需要一些Python字符串/切片操作的帮助

2 投票
3 回答
692 浏览
提问于 2025-04-15 12:54

这是一个非常基础的问题,我可能会因此被投反对票,但老实说,我在谷歌上搜索了至少一个小时也没找到答案。我学会了如何根据“确切位置”来切割字符串,也就是说你必须知道每个单词的结束位置。但我没有找到任何文章解释如何处理那些“动态”的字符串,也就是那些可能会变化的字符串。

而且在这种情况下,我不想使用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)

撰写回答