在第一次出现时拆分

Posted

技术标签:

【中文标题】在第一次出现时拆分【英文标题】:Splitting on first occurrence 【发布时间】:2011-10-17 17:29:09 【问题描述】:

在第一次出现分隔符时拆分字符串的最佳方法是什么?

例如:

"123mango abcd mango kiwi peach"

拆分第一个mango 得到:

"abcd mango kiwi peach"

【问题讨论】:

记住first, *rest = my_list存在 【参考方案1】:
df.columnname[1].split('.', 1)

这将使用第一次出现的 '.' 拆分数据。在字符串或数据框列值中。

【讨论】:

如果有人在寻找 Pandas DataFrame 上的操作,应该是这样的:df["column_name"].str.split('.', 1) Docs:pandas.pydata.org/pandas-docs/stable/reference/api/…【参考方案2】:

你也可以使用str.partition:

>>> text = "123mango abcd mango kiwi peach"

>>> text.partition("mango")
('123', 'mango', ' abcd mango kiwi peach')

>>> text.partition("mango")[-1]
' abcd mango kiwi peach'

>>> text.partition("mango")[-1].lstrip()  # if whitespace strip-ing is needed
'abcd mango kiwi peach'

使用str.partition 的好处是它总是会以如下形式返回一个元组:

(<pre>, <separator>, <post>)

所以这使得解包输出变得非常灵活,因为在结果元组中总是将是 3 个元素。

【讨论】:

这对于从一行文本创建键值对非常有用,如果某些行只有一个键,因为正如你所指出的,你总是得到一个元组:key, _, value = text_line.partition(' ') 您甚至可以使用切片忽略元组中的分隔符:key, value = text_line.partition(' ')[::2]【参考方案3】:

来自the docs:

str.split([<i>sep</i>[, <i>maxsplit</i>]])

返回字符串中的单词列表,使用 sep 作为分隔符字符串。如果给出 maxsplit,则最多完成 maxsplit 个拆分(因此,列表最多有 maxsplit+1 个元素)。

s.split('mango', 1)[1]

【讨论】:

注意:如果在达到maxsplit 计数后可以执行更多拆分,则列表中的最后一个元素将包含字符串的其余部分(包括任何sep 字符/字符串)。 【参考方案4】:

对我来说更好的方法是:

s.split('mango', 1)[-1]

...因为如果发生的情况不在字符串中,您将得到“IndexError: list index out of range".

因此,-1 不会受到任何伤害,因为出现次数已设置为 1。

【讨论】:

如前所述,它是应用 split() 方法的出现次数。方法将仅查找并应用第一个“芒果”字符串。【参考方案5】:
>>> s = "123mango abcd mango kiwi peach"
>>> s.split("mango", 1)
['123', ' abcd mango kiwi peach']
>>> s.split("mango", 1)[1]
' abcd mango kiwi peach'

【讨论】:

@Swiss:那又怎样。技术还是一样的。 @Ignacio:我只是指出来。没有理由用部分正确的答案代替完全正确的答案。 技术上假定了正确的分隔符。 “第一个”是 [1] 索引。我们都引用的当然是第零索引。 :D 语义。 "value" parameter must be a scalar or dict, but you passed a "list"我用s.split("mango", 1)[1]返回了这个 在我的情况下,我不得不在 Pandas 上使用 s.split("mango", 1,expand=True)[1] ,因为我遇到了错误

以上是关于在第一次出现时拆分的主要内容,如果未能解决你的问题,请参考以下文章

根据字符的第一次出现拆分字符串

在某个字符的最后一次出现处拆分字符串

Oracle Regexp 根据第一次出现的分隔符拆分字符串

php preg_split 最后出现的字符

查找字符串中最后一次出现的数字,并按该值拆分字符串

字符的第一次和最后出现?