2013-04-29 3 views
0

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

["Group", "s1", "s2", "Group2"] 

из строки:

string = "_GRP_Group||s1||s2||Group2||" 

All у меня сейчас:

word = re.findall(r'([^\|]+)', string) 

, который только выходит из трубы, и я получаю это:

['_GRP_Group', 's1', 's2', 'Group2'] 

Есть ли способ избавиться от префикса _GRP_?

+0

Есть много способов сделать это, но большинство из них хотят работать в общем случае задачи вы решаете. Другими словами, вы хотите удалить префикс на основе чего? Подчеркивает? Верхний регистр? Длина? –

+0

эй. Спасибо за ответ. я хотел бы отфильтровать его на основе его значения: '_GRP_' – beatlemaniac

ответ

2

На основании ваших комментариев на другие ответы, это звучит как префикс _GRP_ является префиксом к строке, а не каждое отдельное значение разделения?

Попробуйте это:

string = "_GRP_Group||s1||s2||Group2||" 
word = re.findall(r"(?:_GRP_)?([^|]+)", string) 
+0

К сожалению, 'findall' по-прежнему применяет соответствие регулярных выражений' _GRP_' для каждой согласованной группы (как и в случае с другим ответом), но поскольку он является необязательным и [не захватывает] (http://docs.python.org/2/howto /regex.html#non-capturing-and-named-groups), он не будет отображаться на выходе. – nemec

1

Вам не нужно использовать регулярные выражения для разделения первой строки на || или удалить префикс _GRP_. Вы можете просто использовать split и нарезку:

words = "_GRP_Group||s1||s2||Group2||"[5:].split('||') 

срезо [5:] исключат первые пять символов из строки.
Если вы не знаете, где _GRP_ произойдет, вы могли бы использовать replace:

words = "_GRP_Group||s1||s2||Group2||".split('||') 
words = [word.replace("_GRP_", "") for word in words] 
+0

Я мог бы это сделать, но я подумал, что будет более элегантное решение с использованием regex – beatlemaniac

+0

Можно ли увидеть' string = "_GRP_Group || _GRP_s1 || _GRP_s2 || _GRP_Group2 || "' или это префикс для всей самой строки? – nemec

+0

это префикс для всей строки – beatlemaniac

Смежные вопросы