Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python使用空格分割字符串,除非前面有\_Python_Python 2.7_Split_Escaping - Fatal编程技术网

Python使用空格分割字符串,除非前面有\

Python使用空格分割字符串,除非前面有\,python,python-2.7,split,escaping,Python,Python 2.7,Split,Escaping,抱歉,如果这篇文章读起来有点混乱,这是我在这个网站上的第一篇文章,这是一个很难问的问题,我已经尽了最大的努力。我也尝试过谷歌搜索,但什么也找不到 我正在尝试用python创建自己的类似命令行的应用程序,我想知道如果“\”不在空格前面,如何拆分字符串并删除反斜杠 这就是我的意思 >>> c = "play song I\ Want\ To\ Break\ Free" >>> print c.split(" ") ['play', 'song', 'I\\', '

抱歉,如果这篇文章读起来有点混乱,这是我在这个网站上的第一篇文章,这是一个很难问的问题,我已经尽了最大的努力。我也尝试过谷歌搜索,但什么也找不到

我正在尝试用python创建自己的类似命令行的应用程序,我想知道如果“\”不在空格前面,如何拆分字符串并删除反斜杠

这就是我的意思

>>> c = "play song I\ Want\ To\ Break\ Free"
>>> print c.split(" ")
['play', 'song', 'I\\', 'Want\\', 'To\\', 'Break\\', 'Free']
当我用空格分割
c
时,它会保留反斜杠,但会删除空格。 这就是我想要的样子:

>>> c = "play song I\ Want\ To\ Break\ Free"
>>> print c.split(" ")
['play', 'song', 'I ', 'Want ', 'To ', 'Break ', 'Free']
如果有人能帮我,那就太好了

另外,如果它需要正则表达式,请你解释一下,因为我以前从未使用过它们

编辑
现在这个问题已经解决了,我忘了问有没有办法检测反斜杠是否已转义?

只需在空格上拆分,然后将任何以反斜杠结尾的字符串替换为以空格中的一个结尾的字符串:

[s[:-1] + ' ' if s.endswith('\\') else s for s in c.split(' ')]
这是一个列表理解
c
在空格上拆分,并检查每个结果字符串的末尾是否有尾随的
\
反斜杠;如果是,则删除最后一个字符并添加空格

一个轻微的缺点是:如果原始字符串以反斜杠(无空格)结尾,则最后一个反斜杠也会被空格替换

演示:

要处理转义的反斜杠,您需要计算反斜杠的数量。偶数表示反斜杠被转义:

[s[:-1] + ' ' if s.endswith('\\') and (len(s) - len(s.rstrip('\\'))) % 2 == 1 else s
 for s in c.split(' ')]
演示:


看起来您正在编写一个命令行解析器。如果是这样,我可以推荐
shlex.split
?它根据shell词法规则正确分割命令字符串,并正确处理转义。例如:

>>> import shlex
>>> shlex.split('play song I\ Want\ To\ Break\ Free')
['play', 'song', 'I Want To Break Free']

一开始我误读了;您确实希望拆分空格,但如果空格前面有反斜杠,则希望将空格保留为拆分字符串的一部分。检查。如果字符串以反斜杠结尾怎么办?@WilliamKunkel:最后一个反斜杠也会被替换。Hrmz。如果您愿意帮助我,我也刚刚更新了我的questurn!;)@aPyDeveloper:您必须计算字符串末尾的反斜杠数;如果是偶数,则反斜杠被转义
len(s)-len(s.rstrip('\\')
将告诉您字符串末尾有多少反斜杠。宾果!正是我想要的!它甚至知道如果有引号的话就不能拆分!谢谢。:)这很有用,因为它将是来自raw_input()的输入,所以如果它有引号,就不要拆分!谢谢。@aPyDeveloper:我还以为您想生成演示的输出呢!:-)它得到了我想要的输出
>>> c = r"play song I\ Want\ To\ Break\\ Free"
>>> [s[:-1] + ' ' if s.endswith('\\') and (len(s) - len(s.rstrip('\\'))) % 2 == 1 else s
...  for s in c.split(' ')]
['play', 'song', 'I ', 'Want ', 'To ', 'Break\\\\', 'Free']
>>> import shlex
>>> shlex.split('play song I\ Want\ To\ Break\ Free')
['play', 'song', 'I Want To Break Free']