Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.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中从给定字符串中删除奇数\n、\t、\r和空格组合_Python_String_Python 2.7_Replace_Split - Fatal编程技术网

在Python中从给定字符串中删除奇数\n、\t、\r和空格组合

在Python中从给定字符串中删除奇数\n、\t、\r和空格组合,python,string,python-2.7,replace,split,Python,String,Python 2.7,Replace,Split,我有一个长字符串,其中包含\n、\r、\t以及单词和其他字符之间的空格的各种组合 我想将所有多个空间缩减为一个空间。 我想将所有\n、\r、\t组合减少为一个新行字符。 我想将所有\n、\r、\t和空格组合也减少为一个新行字符。 我试过各种方法,但都没有成功 这里正确的肾盂方法是什么 Python3.x的解决方案会有所不同吗 例如字符串: ex_str = u'Word \n \t \r \n\n\n word2 word3 \r\r\r\r\nword4\n word5

我有一个长字符串,其中包含\n、\r、\t以及单词和其他字符之间的空格的各种组合

我想将所有多个空间缩减为一个空间。 我想将所有\n、\r、\t组合减少为一个新行字符。 我想将所有\n、\r、\t和空格组合也减少为一个新行字符。 我试过各种方法,但都没有成功

这里正确的肾盂方法是什么

Python3.x的解决方案会有所不同吗

例如字符串:

ex_str = u'Word   \n \t \r   \n\n\n word2    word3   \r\r\r\r\nword4\n    word5'
所需输出[新行=\n]:

new_str = u'Word\nword2 word3\nword4\nword5'
组合使用str.splitlines和str.split在所有空格上拆分:

这将分别处理每一行,删除空行,然后将每行的所有空白压缩为单个空格

如果输入是Python3字符串,那么相同的解决方案可以在两个Python版本中使用

演示:

要保留选项卡,您需要仅在空格上进行剥离和拆分,并过滤掉空字符串:

'\n'.join([' '.join([s for s in line.split(' ') if s]) for line in ex_str.splitlines() if line.strip()])
演示:

组合使用str.splitlines和str.split在所有空格上拆分:

这将分别处理每一行,删除空行,然后将每行的所有空白压缩为单个空格

如果输入是Python3字符串,那么相同的解决方案可以在两个Python版本中使用

演示:

要保留选项卡,您需要仅在空格上进行剥离和拆分,并过滤掉空字符串:

'\n'.join([' '.join([s for s in line.split(' ') if s]) for line in ex_str.splitlines() if line.strip()])
演示:

输出:

u'Word\nword2\nword3\nword4\nword5'
输出:

u'Word\nword2\nword3\nword4\nword5'
使用简单的正则表达式:

import re
new_str = re.sub(r'[^\S\n]+', ' ', re.sub(r'\s*[\n\t\r]\s*', '\n', ex_str))
使用简单的正则表达式:

import re
new_str = re.sub(r'[^\S\n]+', ' ', re.sub(r'\s*[\n\t\r]\s*', '\n', ex_str))
使用正则表达式:

>>> s
u'Word   \n \t \r   \n\n\n word2    word3   \r\r\r\r\nword4\t    word5'
>>> re.sub(r'[\n\r\t ]{2,}| {2,}', lambda x: '\n' if x.group().strip(' ') else ' ', s)
u'Word\nword2 word3\nword4\nword5'
>>> 
使用正则表达式:

>>> s
u'Word   \n \t \r   \n\n\n word2    word3   \r\r\r\r\nword4\t    word5'
>>> re.sub(r'[\n\r\t ]{2,}| {2,}', lambda x: '\n' if x.group().strip(' ') else ' ', s)
u'Word\nword2 word3\nword4\nword5'
>>> 

另一个使用regex的解决方案是用空格u'word1\t\tword2'替换制表符,或者您真的想在这里添加换行符吗

import re
new_str = re.sub(r"[\n\ ]{2,}", "\n", re.sub(r"[\t\r\ ]+", " ", ex_str))

另一个使用regex的解决方案是用空格u'word1\t\tword2'替换制表符,或者您真的想在这里添加换行符吗

import re
new_str = re.sub(r"[\n\ ]{2,}", "\n", re.sub(r"[\t\r\ ]+", " ", ex_str))


不要命名一个变量str;它屏蔽了内置类型。我想将所有\n、\r、\t和空格组合也减少为一个新行字符。行中的两个空格是否算作\n、\r、\t和空格组合?如果是这样,您如何决定何时使用此规则以及何时使用第一条规则?@Kevin,在字里行间,我有从单个\n、单个\t、单个\r、单个空格到任意或相同的1、2、3或全部4条规则。如果任何组合有一个或多个新行,我希望它是一个单一的新行。如果它只有一个或多个空格,我希望它是一个空格。@MartijnPieters,我替换了示例字符串名。谢谢。您需要澄清您在换行规则中包含的\t。word1\t\tword2应该产生word1 word2还是word1\nword2?不要命名变量str;它屏蔽了内置类型。我想将所有\n、\r、\t和空格组合也减少为一个新行字符。行中的两个空格是否算作\n、\r、\t和空格组合?如果是这样,您如何决定何时使用此规则以及何时使用第一条规则?@Kevin,在字里行间,我有从单个\n、单个\t、单个\r、单个空格到任意或相同的1、2、3或全部4条规则。如果任何组合有一个或多个新行,我希望它是一个单一的新行。如果它只有一个或多个空格,我希望它是一个空格。@MartijnPieters,我替换了示例字符串名。谢谢。您需要澄清您在换行规则中包含的\t。word1\t\tword2是否会导致word1 word2或word1\nword2?请仔细查看预期的输出;您用换行符替换了word2和word3之间的间距;您用换行符替换了word2和word3之间的间距。如果需要换行符,则可能无法满足\t\t的需要。应该换成新行@马蒂恩Pieters@zhangyangyu:我不是100%相信是这样。我认为简单的\t也应该转换成换行符。但是,示例字符串没有这种大小写。@Alfe:请参阅对该问题的注释;OP对此感到困惑。我看到了评论。我看不出关于是否应该将制表符转换为换行符的问题有任何混淆,至少在澄清之后不应该这样做»word1\t\tword2应该是word1\nword2«。但不管怎样,他问了一个新的功能,就是以后忽略标签,所以你也许他重新考虑了这个问题-如果是,则可能无法满足需求3。应该换成新行@马蒂恩Pieters@zhangyangyu:我不是100%相信是这样。我认为简单的\t也应该转换成换行符。但是,示例字符串没有这种大小写。@Alfe:请参阅对该问题的注释;OP对此感到困惑。我看到了评论。我看不出关于是否应该将制表符转换为换行符的问题有任何混淆,至少在澄清之后不应该这样做»word1\t\tword2应该是word1\nword2«。但不管怎样,他问了一个新的功能,就是以后忽略标签,所以你也许他重新考虑了这个问题-