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_String_List_Split_Whitespace - Fatal编程技术网

Python 删除空条目并将其作为空白添加到列表的上一个条目中

Python 删除空条目并将其作为空白添加到列表的上一个条目中,python,string,list,split,whitespace,Python,String,List,Split,Whitespace,我目前正在做一个项目,需要分句来比较两个单词(用户需要输入的给定单词,给我们第二个),并检查用户输入的准确性。我一直在使用x.split(“”)来实现这一点,但是,这给我带来了一个问题 假设给定的句子是QuickBrownFox,用户在中键入QuickBrownFox。 它不是返回['The','quick','brown','fox'],而是返回['The','quick','brown',fox']。这使得检查准确性变得更加困难,因为我希望每个单词都能检查 换句话说,我想在前面的单词后面加上

我目前正在做一个项目,需要分句来比较两个单词(用户需要输入的给定单词,给我们第二个),并检查用户输入的准确性。我一直在使用
x.split(“”)
来实现这一点,但是,这给我带来了一个问题

假设给定的句子是
QuickBrownFox
,用户在
中键入QuickBrownFox
。 它不是返回
['The','quick','brown','fox']
,而是返回
['The','quick','brown',fox']
。这使得检查准确性变得更加困难,因为我希望每个单词都能检查

换句话说,我想在前面的单词后面加上额外的空格,但是
split
函数正在创建单独的(空)元素。如何删除任何空条目并将其添加到前面的单词中

我希望这也适用于一行中有多个
'
条目的列表,例如
['The'、'quick'、''、'brown'、'fox']

谢谢

编辑-我用来测试这一点的代码只是
x=quickbrownfox.split(“”)
的一些变体,带有不同的空格


编辑2-我没有想到这一点(谢谢Malonge),但如果句子以空格开头,我实际上也希望它被计算在内。我不知道这有多容易,因为我需要把这个特殊的例子作为一个例外,在这个例子中,空格需要附加到后面的单词,而不是它前面的单词。然而,我会有意识地选择忽略它由于难以实现,因此在计算精度时可能会出现这种情况。

您可以通过多种方法实现,但您演示的最简单的方法可能是在不指定拆分参数的情况下拆分,这使得它在空格上拆分,而不仅仅是在单个空格上拆分:

>>> s = "The quick  brown fox"
>>>
>>> s.split(' ')
['The', 'quick', '', 'brown', 'fox']
>>> s.split()
['The', 'quick', 'brown', 'fox']
您还可以通过以下方式达到目的:

>>> words = [w for w in s.split(" ") if w]
>>> words
['The', 'quick', 'brown', 'fox']
或使用正则表达式:

>>> import re
>>>
>>> re.split('\s*', s)
['The', 'quick', 'brown', 'fox']

可以使用正则表达式进行此操作,这将匹配第一个空格之后的所有空格:

>>> import re
>>> s = "The quick  brown fox"
>>> re.findall(r'\S+\s*(?=\s\S|$)', s)
['The', 'quick ', 'brown', 'fox']

:


更新:

要匹配字符串开头的前导空格,需要对上述正则表达式进行一些修改:

>>> s = "The quick  brown fox"
>>> re.findall(r'((?:(?<=^\s)\s*)?\S+\s*(?=\s\S|$))', s)
['The', 'quick ', 'brown', 'fox']
>>> s1 = "  The quick  brown fox"
>>> re.findall(r'((?:(?<=^\s)\s*)?\S+\s*(?=\s\S|$))', s1)
[' The', 'quick ', 'brown', 'fox']
>s=“快速棕色狐狸”

>>>re.findall(r’)((?:)(?你能分享给你这样做的代码吗?我似乎无法复制你的问题如果句子以空格开头会发生什么?我想你和你的投票人都没有抓住重点。输出必须是['the'、'quick'、'brown'、'fox')。也就是说,在quick之后是空格:“quick”“你是最棒的。我现在要加上这一点,谢谢!我还应该认真学习更多关于regex的知识,这似乎非常有用。”。
>>> s = "The quick  brown fox"
>>> re.findall(r'((?:(?<=^\s)\s*)?\S+\s*(?=\s\S|$))', s)
['The', 'quick ', 'brown', 'fox']
>>> s1 = "  The quick  brown fox"
>>> re.findall(r'((?:(?<=^\s)\s*)?\S+\s*(?=\s\S|$))', s1)
[' The', 'quick ', 'brown', 'fox']
((?:(?<=^\s)\s*)?\S+\s*(?=\s\S|$))