2015-07-21 2 views
-1

В Python 2.7, я получил следующую строку:Python регулярное выражение со строкой токенизации

"$a first answer$b second answer$c third answer$d fourth answer$SOLUTION: a" 

Как правильно разобрать его с помощью регулярных выражений и хранить его в массиве, как показано ниже?

['first answer', 'second answer', 'third answer', 'fourth answer', 'a'] 

Из того, что я читал до сих пор я считаю, что я как-то скомпилировать мое регулярное выражение и запустить его против этой строки, используя метод match, но я не совсем уверен в том, как это сделать.

+0

Вы написали регулярное выражение? Вы пытались «re.compile» это? Вы читали, например. https://docs.python.org/2/howto/regex.html? – jonrsharpe

ответ

1
x="$a first answer$b second answer$c third answer$d fourth answer$SOLUTION: a" 
print [i for i in re.split(r"\$\S+",x) if i] 

Вы можете сделать это просто split.

+1

Чистый и простой. Будет делать работу так же хорошо. – kstratis

1

Я хотел бы использовать немного более сложное регулярное выражение, которое более с учетом вашего конкретного случая:

s = "$a first answer$b second answer$c third answer$d fourth answer$SOLUTION: a" 
print(filter(None, re.split(r"\$(?:[a-z]\b|SOLUTION:)\s*", s))) 

Это позволит снизить риск overmatching и подрезать получившиеся элементы списка.

См IDEONE demo

В случае, если вы на самом деле можете иметь любое слово после $ необязательно следует с :, вы можете использовать

print(filter(None, re.split(r"(?i)\$[a-z]+\b:?\s*", s))) 
Смежные вопросы