0

さまざまな命名スキームを持つオーディオ ファイル名のリスト (番号が続く文字列のリストである可能性があります) があるとしますが、それらのすべてにファイル名にトラック番号が含まれています。

変化する数字を抽出したい。

例 1

Fooband 41 - Live - 1. Foo Title
...
Fooband 41 - Live - 11. Another Foo Title

望ましい結果

番号のリスト:1,2,3,...,11

例 2

02. Barband - Foo Title with a 4 in it
05. Barband - Another Foo Title
03. Barband - Bar Title
...
17. Barband - Yet another Foo Title

望ましい結果

番号のリスト:2,5,3,...,17

インデックス番号の位置が固定されていないので、正規表現が使えない(と思う)。

私が持っているもの

  1. 文字列の共通のプレフィックスとサフィックスを見つけて、それを切り取ります
  2. 文字列の左側/右側に数字があるかどうかを確認する
  3. その数を使用してインデックスを取得します

しかし、問題があります: Example 1の一般的なプレフィックスを見つけた場合、一般的なプレフィックスは になる Fooband 41 - Live - 1ため、1失われます (同様にSong X - 10, Song X - 11, ...).

質問

文字列のリストで変化する番号 (同様の位置にある) を検出して抽出する良い方法は何ですか?

私はPythonを使用しています(この問題には関係ありません)

ローマ数字も検出できればおまけですが、それはもっと難しいと思います。

4

2 に答える 2

1
f = open('data.txt')
data = []

pattern = "\d+|[IVX]+"
regex = re.compile(pattern)

for line in f:
    matches = re.findall(regex, line)
    data.append(matches)

f.close()

print data
transposed_data = zip(*data)
print transposed_data

for atuple in transposed_data:
    val = atuple[0]

    if all([num==val for num in atuple]): 
        next
    else:
        print atuple
        break

data.txt:

Fooband 41 - Live - 1. Foo Title
Fooband 41 - Live - 2. Foo Title
Fooband 41 - Live - 3. Foo Title
Fooband 41 - Live - 11. Another Foo Title

- 出力: -

[['41', '1'], ['41', '2'], ['41', '3'], ['41', '11']]
[('41', '41', '41', '41'), ('1', '2', '3', '11')]
('1', '2', '3', '11')

data.txt:

01. Barband - Foo Title with a 4 in it
05. Barband - Another Foo Title
03. Barband - Bar Title
17. Barband - Yet another Foo Title

- 出力: -

[['01', '4'], ['05'], ['03'], ['17']]
[('01', '05', '03', '17')]
('01', '05', '03', '17')

data.txt:

01 Barband - Foo Title with a (I) in it
01 Barband - Another Foo (II) Title
01. Barband - Bar Title (IV)
01. Barband - Yet another (XII) Foo Title

- 出力: -

[['01', 'I'], ['01', 'II'], ['01', 'IV'], ['01', 'XII']]
[('01', '01', '01', '01'), ('I', 'II', 'IV', 'XII')]
('I', 'II', 'IV', 'XII')
于 2013-06-06T11:16:02.640 に答える
0

それらが同様にフォーマットされている場合、python のre moduleを使用できます。文字列のリストからこれらの数値を抽出する短いコードは次のようになります。

import re
regex = re.compile(".*([0-9]+).*")

number = regex.match("Fooband 41 - Live - 1. Foo Title").group(1)
于 2013-06-06T10:57:14.757 に答える