使用可能的子括号获取括号中的字符串

时间:2014-12-15 14:21:06

标签: python string-formatting

我正在编写一个脚本来解析和格式化广播电台的歌曲名称和艺术家。播出系统将跟踪元数据发送到python脚本

$ python metadata.py "title" "artist"

稍后将格式化的元数据发送到HTTP端点。

元数据将以这种格式出现;

Title: "Song Name (feat. ABC) (Ost. XYZ (aka. ASDF))"
Artist: "DEF"

如您所见,有时feat.Ost.可以包含子括号。 这就是我想要实现的目标:

Title: "Song Name"
Artist: "DEF feat. ABC"

基本上是放弃Ost.括号中的所有内容并将feat.括号向下移动到艺术家字段。

但问题是,我需要一些代码来检测主括号的实际末端(忽略子括号)以正确格式化它们。

1 个答案:

答案 0 :(得分:0)

所以这是一种计算括号的新方法,我定义了一个函数:

def getInsideBracket(title):
    bracket = 0
    last = 0
    first = 0
    for pos, car in  enumerate(title):
        if car == '(':
            if bracket == 0:
                first = pos
            bracket += 1

        elif car == ')':
            bracket -= 1
            if bracket == 0:
                last = pos
                return first, last

它全部都在壮举中。 所以现在你可以采取这两个位置(第一个和最后一个):

fist, last = getInsideBracket(title)
feat = title[first:last]
feat = feat[feat.index(' '):]

您必须将feat添加到您的艺术家字符串中,并从标题字符串中删除此块:

title = title[:title.index('(feat.')]

希望有所帮助