0

Pythonでは、次の文字列があります。

"fish 14~ reel 14 rod B14"

REGEX を使用して for ループを実行し、1 つ以上の数値を含む各部分文字列の場所を返したいと考えています。元。:

 For ():
     print location of substring

私の予想出力は次のようになります。

5
14
21

助けてください、ありがとう。

回答: わかりました、次のすべてをテストしましたが、すべて動作します。それで、どれが最速ですか?ドラムロール.... 速い順に: 1) Perreal - 9.7ms 2) Jon - 10.5ms 3) m.buettner - 12.3ms 4) upasana - 25.6ms

Python の天才の皆さんに感謝します。別の解決策がありましたが、テストしませんでした。他のさまざまな理由から、私は自分のプログラムにジョンの方法を選びました。

4

4 に答える 4

0

これを試して:

#!/usr/bin/env python

import re

str = "fish 14~ reel 14 rod B14"
index = 0
for x in str.split(" "):
    if re.search('\d', x):
        print(max(str.find(x), index))
    index += len(x) + 1

出力:

5
14
21
于 2013-04-18T15:11:04.153 に答える
0

正規表現を使用せずにこれを行うこともできます。

p = list()
for i in [ i for i,c in enumerate(str) if c.isdigit() ]:
    if len(p) == 0 or p[-1] + 1 != i:
        p.append(i)
print p

ただし、これにより、すぐ前に別の数字がない数字の開始位置が得られます。これを完成させるために後方に曲げます:

p = list()
for i in [ i for i,c in enumerate(str) if c.isdigit() ]:
    if i > 0 and not str[i - 1].isdigit():
        while i > 0 and str[i - 1].isalnum():
            i -= 1
        p.append(i)
print p
于 2013-04-18T14:14:29.380 に答える