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