2015-02-01 5 views
3

У меня есть набор файлов, составленному следующим образом:Split согласно «:» в нескольких строках

Product: Name 
Description: description of product 

Я хочу, чтобы извлечь только имя и содержание описании в без 'Product:' и 'Description:'. Для этого я делаю:

div = re.split('Product:\s+|Description:\s+', contentOfFile) 

Проблема заключается в том, что я получаю таблицу 3-х элементов вместо 2 с «» (пробел) в начале. Я не знаю, если пространство всегда принимается во внимание, потому что я просто хочу, чтобы в этом случае:

["Name","description of product"] 

ответ

5

Давайте упростим ваш пример. Что, если мы разделим на трубу вместо ваших регулярных выражений?

>>> "|a|b".split('|') 
['', 'a', 'b'] 

Если строка начинается с разделителя, split добавит лишний пустой элемент в возвращаемое значение. Теперь в вашем случае разделитель является регулярным выражением, но аналогично, ваша строка начинается с чего-то, что соответствует этому выражению, поэтому первый возвращаемый элемент является пустой строкой.

Для решения этой проблемы, вы можете просто пропустить первый элемент

div = re.split('Product:\s+|Description:\s+', contentOfFile)[1:] 
+0

мелкий опечатка ошибка. div вместо iv – aberna

+1

хорошее объяснение, но мне это не нравится. Это очень зависит от текста перед ':', также я нахожу это немного нечистым из-за '[1:]'. – Maroun

4

Вам не нужно split, используйте findall:

>>> re.findall(r":\s+(.*)", a) 
['Name', 'description of product'] 

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

SomeText: Name 
BlaBlaBla: description of product 

он будет извлекать Name и description of product. Хорошая практика - написать общее решение для вашей проблемы и попытаться подумать о возможных будущих сценариях.

0

общее решение с помощью метода расщепляется без использования регулярных выражений.

>>> x = """Product: Name 
Description: description of product""" 
>>> [i.split(':')[1].lstrip() for i in x.split('\n')] 
['Name', 'description of product'] 
-1

я думаю, вы можете попробовать функцию полосы вместо раскола ... это ALDO помощь, чтобы удалить пространство .. здесь небольшой пример расщепленной функции

str1 = "Product: Name"; 
str2 = "Description: description of product"; 
print str1.lstrip('Product:, '); 
print str2.lstrip('Description:, '); 

и результат, показанный в ниже ....

Name 
description of product 
+0

OP имеет только одну строку с несколькими строками. – Maroun

+0

Я думаю, вы не понимаете, как работает полоса: '' Описание: Описание продукта .lstrip ('Описание :,') '->' 'f product'' – bav

+0

Мой дорогой друг ... – kunjan343

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