gpt4 book ai didi

Python 正则表达式 - 从路径中提取目录

转载 作者:太空宇宙 更新时间:2023-11-03 13:04:15 29 4
gpt4 key购买 nike

我有一个关于正则表达式/Python 的问题。抱歉,如果这个话题已经被讨论了数百万次——通常我会在 so/google 等上找到答案,但我被这个问题困在了数百万个答案中……(老实说——我有一本正则表达式的书,但不知何故我太笨了,无法真正理解它......)

对于音乐管理系统,我需要从路径中提取信息,提供不同的选项集。这里有两个例子:

如果路径是:(案例1)

"/The Prodigy/The Fat Of The Land/04 - Funky Stuff.flac"
它应该提取:
  • 艺术家:“神童”
  • 发布:“大地之肥”
  • 轨道数:4
  • 标题:“时髦的东西”

例如:(案例 2)

"/[XLR 483] The Fat Of The Land/04 - The Prodigy - The  Funky Stuff.flac"
应该提取:
  • 卡诺:“XLR 483”
  • 发布:“大地之肥”
  • 轨道数:4
  • 艺术家:“神童”
  • 标题:“时髦的东西”

不需要涵盖这两种情况的正则表达式,这只是两个示例。然后我会将它们作为选项提供(或添加自己的选项的起点)。

如有任何帮助,我们将不胜感激!

@ S.Lott:我没有正则表达式,我从拆分字符串开始:

parts = rel_path.split('/')       
track = parts[-1]
release = parts[-2]
artist = parts[-3]

但这对我来说似乎是一个极其不灵活和不优雅的解决方案。

编辑:

到目前为止,我有类似的东西:

pattern = re.compile('^/(?P<artist>[a-zA-Z0-9 ]+)/(?P<release>[a-zA-Z0-9 ]+)/(?P<track>[a-zA-Z0-9 -_]+).[a-zA-Z]*.*')


rel_path = '/The Prodigy/The Fat Of The Land/04 - Funky Stuff.flac'

match = pattern.search(rel_path)

artist = match.group('artist')
release = match.group('release')
track = match.group('track')

最佳答案

虽然不是必须的,但是对于这个问题,re 是得心应手的选择。

import re
pattern = re.compile(r"/(?P<artist>[a-zA-Z0-9 ]+?)/(?P<release>[a-zA-Z0-9 ]+?)/(?P<tracknumber>\d+?) - (?P<title>[a-zA-Z0-9 ]+?).flac")
s = "/The Prodigy/The Fat Of The Land/04 - Funky Stuff.flac"
m = pattern.search(s)
print m.group('artist')
print m.group('release')
print m.group('track number')
print m.group('title')

我使用诸如 [a-zA-Z0-9 ] 之类的表达式来明确指定我希望在字符串中出现的字符。我更喜欢使用类似白名单的正则表达式来使代码更安全。还有许多其他方法可以构成等效模式。你会在这里找到你需要的一切http://docs.python.org/library/re.html ,你不需要一本书。

关于Python 正则表达式 - 从路径中提取目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9268771/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com