2016-03-26 27 views
2
dave = [m.start() for m in re.finditer('*', "2345234*265354*26342567*356")] 
print(dave) 

このコードを実行すると、この巨大なエラーが発生します。文字列内の文字のインデックスを見つける

Traceback (most recent call last): 
File "C:\Users\Max\Desktop\MaxsCal V.1.py", line 107, in <module> 
dave = [m.start() for m in re.finditer('*', "2345234*265354*26342567*356")] 
File "C:\Program Files (x86)\Python 3\lib\re.py", line 220, in finditer 
return _compile(pattern, flags).finditer(string) 
File "C:\Program Files (x86)\Python 3\lib\re.py", line 293, in _compile 
p = sre_compile.compile(pattern, flags) 
File "C:\Program Files (x86)\Python 3\lib\sre_compile.py", line 536, in compile 
p = sre_parse.parse(p, flags) 
File "C:\Program Files (x86)\Python 3\lib\sre_parse.py", line 829, in parse 
p = _parse_sub(source, pattern, 0) 
File "C:\Program Files (x86)\Python 3\lib\sre_parse.py", line 437, in _parse_sub 
itemsappend(_parse(source, state)) 
File "C:\Program Files (x86)\Python 3\lib\sre_parse.py", line 638, in _parse 
source.tell() - here + len(this)) 
sre_constants.error: nothing to repeat at position 0 

[7, 14, 23]のようなもののすべて*の指標、であることを意味する出力を与えるためにコードを修正するためにとにかくがあります。

+2

あなたのコードは何をすべきですか? – AMACB

+0

すべてのインデックスを印刷する* –

+1

あなたのポストに入れて... :) – Signal

答えて

5

re.finditer()は正規表現を使用して一致するものを検索します。あなたの場合、正規表現は'*'です。 *は、あなただけの星文字を検索することを意味ので、もし、あなたがそれをエスケープする必要があり、正規表現で特別な意味を持っています

dave = [m.start() for m in re.finditer('\\*', "2345234*265354*26342567*356")] 
+0

ありがとう、本当に役立つ! –

4

あなたはインデックスを列挙することができます。

>>> [index for index, value in enumerate("2345234*265354*26342567*356") if value == '*'] 
[7, 14, 23] 
+3

私は本当に 're'を使ってこの解決策を好んでいます。Nice –

+0

もっとpythonicなのは読みやすく、理解しやすいからです。私たちは常に、最も読みやすい実装を最も魅力的なものよりも優先させるべきです。リスト内包表記は実際に演奏されるので、それらを使用することは悪いことではありません。 –

0

あなたは可能性があり

def findChar(char, string): 
    indexes = [] 
    b = 0 
    for i in string: 
     if i == char: 
      indexes.append(b) 
     b += 1 
    return indexes 

本当にreを使いたいのであれば、ポケの答えを見てください。

関連する問題