【问题标题】:python - split and get the part of a str before the last occurrence of separator [closed]python - 在最后一次出现分隔符之前拆分并获取str的一部分[关闭]
【发布时间】:2021-09-06 02:11:12
【问题描述】:

我正在尝试提取某些字符串的某些部分。这些字符串看起来像

a = "1_2_3"
b = "1_2_3_4"

我想在最后一个下划线之前获取每个字符串的所有内容:

"1_2"
"1_2_3"

我认为这条线应该可以工作:

"_".join(a.split("_")[:-1])
"_".join(b.split("_")[:-1])

但它给了我错误:AttributeError: 'str' object has no attribute 'joint'

但是,a.split("_")[:-1] 显然不是一个 str 而是一个列表(我通过 type(a.split("_")[:-1]) 进行了检查)。有谁知道为什么会发生这种情况以及如何解决?

【问题讨论】:

  • 你的代码适合我
  • 属性错误会因为你输入错误而引发,然后你可能已经修复它,现在它应该可以正常工作了。

标签: python join split


【解决方案1】:

听起来您将str.join() 拼错为str.joint()

但对于您的用例,看起来 str.rpartition() 会更合适,删除拆分连接循环。

a = "1_2_3"
b = "1_2_3_4"

print(a.rpartition("_")[0])
print(b.rpartition("_")[0])

输出

1_2
1_2_3

【讨论】:

  • 啊,你完全正确!非常感谢!!!
【解决方案2】:

您得到了一个很好的答案,可以解决您可能应该接受的问题。但是如果你想要一个替代方案,你可以直接对字符串进行切片:

a = "1_2_3"
b = "1_2_3_4"

a[:a.rindex('_')]
# '1_2'

b[:b.rindex('_')]
# '1_2_3'

这是通过在字符串中找到最右边的_ 索引并切分到该点来实现的。

【讨论】:

    【解决方案3】:

    或者你可以试试rsplit:

    >>> a = "1_2_3"
    >>> x, _ = a.rsplit('_', 1)
    >>> x
    '1_2'
    >>> 
    

    或者一个带有正则表达式的:

    >>> import re
    >>> a = "1_2_3"
    >>> re.sub('_\d$', '', a)
    '1_2'
    >>> 
    

    【讨论】:

      猜你喜欢
      • 2013-12-28
      • 2019-02-08
      • 2019-01-06
      • 2020-04-15
      • 2014-01-12
      • 1970-01-01
      • 2018-06-14
      • 2011-01-28
      • 1970-01-01
      相关资源
      最近更新 更多