Python3 - 将带空格的引用文本作为单个项目[重复]

Posted

技术标签:

【中文标题】Python3 - 将带空格的引用文本作为单个项目[重复]【英文标题】:Python3 - Getting quoted text with spaces as single item [duplicate] 【发布时间】:2017-01-27 18:16:17 【问题描述】:

如果我有一个输入行,例如

userInput = input("Enter stuff: ").split()

返回一个由空格分隔的列表。

我将如何着手将引用的文本作为单个项目保留在列表中?

例如。如果我输入hello "where are you?"

我想得到一个带有['hello', 'where are you?'] 而不是['hello', '"where', 'are', 'you?"'] 的列表

目前我正在使用 for 循环将引用的文本重新添加到一起,但我希望采用更时尚的方式。

userInputString = ""
for x in userInput[1:]:
    userInputString = userInputString + x + " "
userInputString = userInputString[1:-2] #remove the quotes and the last space

【问题讨论】:

对此有一些选择,包括使用正则表达式或 for 循环列表,并构建第二个数据结构来查找用于链接单词的双引号 - 您尝试过什么? 啊,我使用 for 循环将引用的文本重新组合在一起,但希望采用更时尚的方式。我会将其编辑到问题中。 老实说,这个问题相当广泛(有很多方法可以做到这一点):超越for循环two are shown here 刚刚添加了适合我的当前方法,输入将只有一个世界,后跟引用的文本。 【参考方案1】:

你可以使用:

>>> s = 'hello "where are you?"'
>>> s.split('"')
['hello ', 'where are you?', '']

为了避免最后一个空白,最好使用列表推导:

>>> [item for item in s.split('"') if item]
['hello ', 'where are you?']

【讨论】:

试试这个字符串:s = 'hello? "how are you" I am "fine thank you"' 你会注意到它还结合了“我是” s = 'hello foo "what do you want?" pies "I love cheese"' 也会破坏它。 也许我没有正确理解这个问题。我应该用这个字符串得到什么结果:'hello? "how are you" I am "fine thank you"' 你应该以[hello?, how are you, I, am, fine thank you]结束【参考方案2】:

使用shlex.split 使用shell 样式拆分,这是对引号敏感的:

>>> s = 'hello "where are you?"'
>>> shlex.split(s)
['hello', 'where are you?']

【讨论】:

以上是关于Python3 - 将带空格的引用文本作为单个项目[重复]的主要内容,如果未能解决你的问题,请参考以下文章

添加一个双空格作为分隔符

将带逗号的双引号作为分隔符从 S3 导入 Amazon Redshift

Python3基础 字符串 center 左右填充空格,达到指定长度,使文本居中

将带符号的 Int 转换为带空格的十六进制字符串

动态更改主页按钮链接

将带日期的文件加载到 netezza