【问题标题】:Need some help with python string / slicing operations在 python 字符串/切片操作方面需要一些帮助
【发布时间】:2010-11-10 20:03:26
【问题描述】:

这是一个非常新手的问题,我可能会因此而被否决,但老实说,至少在谷歌上搜索了一个小时后,我还是找不到答案。我学习了如何根据“确切位置”对字符串进行切片,您必须确切知道单词在哪里结束。但我没有找到任何文章解释如何处理可能改变的“非静态”字符串。

我也不想在这种情况下使用 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]

当您有一个动态字符串且您不知道每个单词的结尾位置时,我不确定如何执行此操作。

我非常感谢一些关于我应该阅读哪些函数/方法来归档它的指针。提前谢谢你。

【问题讨论】:

    标签: python string slice


    【解决方案1】:

    为什么拆分过大?

    verb, title, definition = myString.split (' ', 2)
    

    【讨论】:

    • 这会影响字符串中包含多个空格的第三部分吗?
    • 不,split的第二个参数表示分割字符串的最大次数。在前 2 个之后,返回字符串的其余部分。
    • @mandroid 第二个参数告诉它要执行多少次拆分。在这种情况下,它将在第二次出现分隔符后停止拆分。 docs.python.org/library/stdtypes.html#str.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)
    

    【讨论】:

    • 这是一个很好的答案!太感谢了!我一定会使用你的一些建议!谢谢!
    • 啊,你不想用锯子。这里是电锯!
    • 请注意 myString.split() 对空白进行规范化,因此之后再次执行 join() 不会让您回到原来的“定义”。
    【解决方案3】:

    选择的答案(PEP8ing 之后):

    verb, title, definition = my_string.split(' ', 2)
    

    在一个空格上分割。如果标题两侧有制表符或多个空格,则在运行的空白处拆分可能是更好的选择:

    verb, title, definition = my_string.split(None, 2)
    

    还要考虑规范化定义中的空白:

    definition = ' '.join(definition.split())
    

    【讨论】:

    • @mhawke:我认为 normali[sz]e_whitespace() 将是 str 方法的一个很好的候选者......连接/拆分雀跃非常低效,尤其是在不需要更改时;在这种情况下,内置函数可能只返回对原始字符串的引用。关于加入/拆分的一件烦人的事情是 \xA0 又名  在 Python 2.x 的(默认)C 语言环境中不被视为空格。
    • 一般来说我喜欢你的建议,但我从字面上理解了他的规范:# 格式是 !save [singleword] [definition]
    • @jholloway:关于“我从字面上理解他的规范”......你的忏悔来得相当晚。你真的悔改了吗?
    • @John Machin 不知道你的意思,但如果这让你高兴的话,我会为我的解决方案中的 PEP8 错误忏悔 :)
    • @jholloway:我的意思是:你真的后悔从字面上理解 OP 的规范吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-16
    相关资源
    最近更新 更多