3

そのような操作を行うのに問題があります。たとえば、文字列があるとします

teststring = "This is a test of number, number: 525, number: 585, number2: 559"

525 と 585 をリストに保存したいのですが、どうすればよいですか?

私は非常に愚かな方法でそれを行いましたが、うまくいきますが、もっと良い方法があるはずです

teststring = teststring.split()
found = False
    for word in teststring:
        if found:
            templist.append(word)
            found = False
        if word is "number:":
            found = True

正規表現を使用したソリューションはありますか?

フォローアップ: 525、585、559 を保存したい場合はどうすればよいですか?

4

5 に答える 5

5

使用reモジュール:

>>> re.findall(r'number\d*: (\d+)',teststring)
['525', '585', '559']

\d任意の数字です [0-9]
*は 0 から無限回
()を意味します キャプチャする対象を示し
+ます 1 から無限回を意味します

int生成された文字列をsに変換する必要がある場合は、次を使用しmapます。

>>> map(int, ['525', '585', '559'])
[525, 585, 559]

また

リスト内包表記:

>>> [int(s) for s in ['525', '585', '559']]
[525, 585, 559]
于 2013-08-01T22:33:29.393 に答える
3

これを試すことができます:

import re
[int(x) for x in re.findall(r' \d+', teststring)]

それはあなたに与えるでしょう:

[525, 585, 559]
于 2013-08-01T22:31:06.050 に答える
1

私は提案します:

teststring = "This is a test of number, number: 525, number: 585, number2: 559"
# The following does: "This is a test of number, number: 525, number: 585, number2: 559" -> ["525, number", "585, number2", "559"]
a = teststring.split(': ')[1:]
# The following does: ["525, number", "585, number2", "559"] -> ["525", " number", "585", " number2", "559"]
b = [i.split(',') for i in a]
# The following does: [["525", " number"], ["585", " number2"], ["559"]] -> ["525", "585", "559"]
c = [i[0] for i in b]
>>> c
['525', '585', '559']
于 2013-08-01T22:38:46.133 に答える