Python 如何按制表符拆分字符串,但每次仅拆分一次

Python 如何按制表符拆分字符串,但每次仅拆分一次,python,python-2.7,Python,Python 2.7,我有一个如下结构的字符串: "I\thave\ta\t\tstring" "Ihavea\tstring" 为了按选项卡进行拆分,我使用了以下方法: text = [splits for splits in row.split("\t") if splits is not ""] 现在,此方法将从字符串中删除所有制表符,但我希望它仅删除单词后第一次出现的制表符,因此它将以如下方式结束: "I\thave\ta\t\tstring" "Ihavea\tstring" 有什么方法可以做到这

我有一个如下结构的字符串:

"I\thave\ta\t\tstring"
"Ihavea\tstring"
为了按选项卡进行拆分,我使用了以下方法:

text = [splits for splits in row.split("\t") if splits is not ""]
现在,此方法将从字符串中删除所有制表符,但我希望它仅删除单词后第一次出现的制表符,因此它将以如下方式结束:

"I\thave\ta\t\tstring"
"Ihavea\tstring"

有什么方法可以做到这一点吗?

使用
re.split
对一个否定的look-behind断言执行以下操作:

import re

s = ''.join(re.split(r'(?<!\t)\t', row))
print(s)
# 'Ihavea\tstring'

使用
re.split
对反向查找后的断言应执行以下操作:

import re

s = ''.join(re.split(r'(?<!\t)\t', row))
print(s)
# 'Ihavea\tstring'

为了保持简单,您可以使用


正则表达式
r'\t+'
基本上只是将所有连续的选项卡组合在一起。

为了保持简单,可以使用


正则表达式
r'\t+'
基本上只是将所有连续的选项卡组合在一起。

如果要避免导入re模块,列表理解也是一种方法:

row = "I\thave\ta\t\tstring"
text = [splits if splits else "\t"  for splits in row.split("\t")]
"".join(text)
#'Ihavea\tstring'

布尔上下文中的空字符串为false,并且将为每个连续拆分字符生成空列表元素(在本例中为“\t”)

如果要避免导入re模块,列表理解也是一种方法:

row = "I\thave\ta\t\tstring"
text = [splits if splits else "\t"  for splits in row.split("\t")]
"".join(text)
#'Ihavea\tstring'

布尔上下文中的空字符串为false,并且将为每个连续拆分字符生成空列表元素(在本例中为“\t”)

请记住,这严格用于拆分字符串。你可以用
”轻松地将它们重新连接在一起。join(split_string)
我承认@MosesKoledoye有一个更好的答案,因为我的答案将删除所有标签,如果有多个标签,他的标签将保留一个。请记住,这是严格用于拆分字符串的。您可以使用
”轻松地将它们重新连接在一起。join(split_string)
我承认@MosesKoledoye有一个更好的答案,因为我的答案将删除所有选项卡,如果有多个选项卡,他将保留一个。