在第二次出现字符后拆分文本

新手上路,请多包涵

我需要在第二次出现“-”字符之前拆分文本。我现在所拥有的是产生不一致的结果。我尝试了 rsplit 的各种组合,通读并尝试了其他解决方案,但没有结果。

要拆分的示例文件名: 'some-sample-filename-to-split'data.filename --- 中返回。在这种情况下,我只想返回 'some-sample'

 fname, extname = os.path.splitext(data.filename)
file_label = fname.rsplit('/',1)[-1]
file_label2 = file_label.rsplit('-',maxsplit=3)
print(file_label2,'\n','---------------','\n')

原文由 DBS 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 319
2 个回答

你可以这样做:

 >>> a = "some-sample-filename-to-split"
>>> "-".join(a.split("-", 2)[:2])
'some-sample'

a.split("-", 2) 将字符串拆分为第二次出现 -

a.split("-", 2)[:2] 将给出列表中的前 2 个元素。然后简单地加入前 2 个元素。

或者

您可以使用正则表达式: ^([\w]+-[\w]+)

 >>> import re
>>> reg = r'^([\w]+-[\w]+)'
>>> re.match(reg, a).group()
'some-sample'

编辑: 正如评论中所讨论的,这是您需要的:

 def hyphen_split(a):
    if a.count("-") == 1:
        return a.split("-")[0]
    return "-".join(a.split("-", 2)[:2])

>>> hyphen_split("some-sample-filename-to-split")
'some-sample'
>>> hyphen_split("some-sample")
'some'

原文由 JRodDynamite 发布,翻译遵循 CC BY-SA 4.0 许可协议

在分隔符第 n 次出现时将字符串分成两半的通用形式是:

 def split(strng, sep, pos):
    strng = strng.split(sep)
    return sep.join(strng[:pos]), sep.join(strng[pos:])

如果 pos 为负数,它将从字符串末尾开始计算出现次数。

 >>> strng = 'some-sample-filename-to-split'
>>> split(strng, '-', 3)
('some-sample-filename', 'to-split')
>>> split(strng, '-', -4)
('some', 'sample-filename-to-split')
>>> split(strng, '-', 1000)
('some-sample-filename-to-split', '')
>>> split(strng, '-', -1000)
('', 'some-sample-filename-to-split')

原文由 Nuno André 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题