【问题标题】:How to split and parse a string by nth dash in python如何在python中通过第n个破折号拆分和解析字符串
【发布时间】:2020-02-10 21:06:44
【问题描述】:

我是 python 新手,我有一个关于用连字符(破折号 -)解析字符串的作业。

给定字符串:db/100749/2020-01-06/100749-2020-01-06-20-25-43-2020-01-06-20-40-43.jpg 我喜欢从给定的字符串中解析 20-25-4320-40-43 并最终返回一个字符串或数字 202543 和 204043

我尝试使用类似:.split("-", 5)[:-1] 但我无法弄清楚 5 和 -1 的作用

【问题讨论】:

  • 您应该考虑使用正则表达式。
  • 你最好先熟悉 python 文档,尝试谷歌搜索“python docs split”开始,然后搜索“python slicing”
  • -2020- 是否总是在文件名中?
  • 为了回答你的第二个问题,.split("-", 5)[:-1] 实质上是在- 处拆分字符串。 5 这里的意思是拆分只执行 5 次,剩下的将被合并为一个。这就是为什么使用-1 的原因,只选择分裂而不是棒状部分(或选择除了最后一个条目之外的所有内容)。您可以尝试.split('-').split('-',5) 然后.split('-',5)[:-1] 以获得更清晰的图像!
  • @JakobF 我觉得正则表达式是正确的方法。仍在学习如何使用它。

标签: python string parsing split hyphen


【解决方案1】:

这个任务听起来应该可以使用split 函数和slicing/extended indexing"a string"[1:4] 语法)来实现。阅读 Python 文档(链接到它们)中函数的作用。

提示:您可以使用"a string"[n] 访问字符串中的字符编号n,并且使用负数索引将从字符串末尾倒数。

>>>"abcd"[-1]
'd'

或者,您也可以使用正则表达式(它也经常在其他地方使用,是学习如何使用的好工具)。正则表达式也是documented

【讨论】:

    【解决方案2】:

    您可以使用正则表达式很好地做到这一点。当 date 和 id 也被传递时(我想是字符串?)你可以简单地使用 rf 字符串:

    import re
    
    search_string = 'db/100749/2020-01-06/100749-2020-01-06-20-25-43-2020-01-06-20-40-43.jpg'
    
    def get_numbers(date,identifier):
        regex = rf'{identifier}-{date}-(\d+-\d+-\d+)-{date}-(\d+-\d+-\d+).jpg'
        return re.findall(regex, search_string)
    
    print(get_numbers('2020-01-06', '100749'))
    

    输出:

    [('20-25-43', '20-40-43')]
    

    【讨论】:

    • 正则表达式一直是我的弱点。我需要继续深入研究正则表达式。再次感谢您
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-10
    • 1970-01-01
    • 2020-12-31
    • 2016-06-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多