0

/Apath1/Bpath2/Cpath3/0-1-2-3-4-5-something.otherthing「0-1-2-3-4-5」の部分だけを抽出したい文字列があるとしましょう。私はこれを試しました:

str='/Apath1/Bpath2/Cpath3/0-1-2-3-4-5-something.otherhing'

print str[str.find("-")-1:str.find("-")]

しかし、結果は 0 しかありません。「0-1-2-3-4-5」の部分だけを抽出するにはどうすればよいですか?

4

4 に答える 4

5

os.path.basename と rsplit を使用します。

>>> from os.path import basename
>>> name = '/Apath1/Bpath2/Cpath3/0-1-2-3-4-5-something.otherhing'
>>> number, tail = basename(name).rsplit('-', 1)
>>> number
'0-1-2-3-4-5'
于 2012-11-26T03:05:29.877 に答える
3

あなたはもうすぐそこにいます:

str='/Apath1/Bpath2/Cpath3/0-1-2-3-4-5-something.otherhing'
print str[str.find("-")-1:str.rfind("-")]

rfind最後から検索します。これは、パスの他の場所にダッシュが表示されないことを前提としています。可能であれば、代わりに次のようにします。

str='/Apath1/Bpath2/Cpath3/0-1-2-3-4-5-something.otherhing'
str = os.path.basename(str)
print str[str.find("-")-1:str.rfind("-")]

basename残りのパスを除外して、ファイル名を取得します。それはおそらくあなたが望むものです。

編集:

@bradley.ayers が指摘したように、質問にファイル名が正確に記載されていない場合、これはうまくいきません。を使用しているためbasename、開始インデックスを省略できます。

print str[:str.rfind("-")]

これは、「/Apath1/Bpath2/Cpath3/10-1-2-3-4-5-something.otherhing」を「10-1-2-3-4-5」として解析します。

于 2012-11-26T03:06:48.433 に答える
1

これは機能します:

>>> str='/Apath1/Bpath2/Cpath3/0-1-2-3-4-5-something.otherhing'
>>> str.split('/')[-1].rsplit('-', 1)[0]
'0-1-2-3-4-5'

必要なのは最後の「/」と最後の「-」の間にあると仮定します。を使用した他の提案のos.path方が理にかなっている場合があります(適切なパスがどのように見えるかについてOSの混乱がない限り)

于 2012-11-26T03:07:31.873 に答える
0

あなたが使用することができますre

>>> import re
>>> ss = '/Apath1/Bpath2/Cpath3/0-1-2-3-4-5-something.otherhing'
>>> re.search(r'(?:\d-)+\d',ss).group(0)
'0-1-2-3-4-5'

少し複雑ですが、これに似たソリューションはもう少し堅牢なようです...

于 2012-11-26T03:14:46.913 に答える