2016-03-26 3 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 

Или посмотрим на ответ тыкать, если вы действительно хотите использовать повторно.