2015-02-01 15 views
3

나는 구성 파일 세트가 있습니다. 이를 위해 나는 다음을 수행한다 :분할 ":"다음과 같이 여러 라인은

문제는 처음에는 ''(공백)를 사용하여 2 대신 3 개의 요소로 이루어진 테이블을 얻는 것이다. findall

["Name","description of product"] 

답변

5

예를 간략하게 설명해 드리겠습니다. 정규 표현식 대신에 파이프로 분할하면 어떨까요?

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

문자열이 구분 기호로 시작하면 split은 반환 값에 여분의 빈 요소를 추가합니다. 이제 구분자는 정규 표현식이지만 비슷하게 문자열은 해당 표현식과 일치하는 것으로 시작하므로 반환 된 첫 번째 요소는 빈 문자열입니다. 이 문제를 해결하기 위해

, 당신은 정규식을 사용하지 않고 첫 번째 요소

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

작은 오타가 있습니다. div 대신 div – aberna

+1

좋은 설명을했지만이 솔루션을 좋아하지 않습니다. 이것은':'앞의 텍스트에 매우 의존적인데,'[1 :] '때문에 조금 더 부정하다. – Maroun

4

당신은 split 필요하지 않습니다를 사용 : 난 그냥이 경우 싶어하기 때문에 공간이 항상 고려하면 모르는

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

이 솔루션을 사용하여,

SomeText: Name 
BlaBlaBla: description of product 

Namedescription 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

는 내가 그것을 여기로 표시 분할 기능

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 ('Description :,')'->'f product'' – bav

+0

친애하는 친구 ... – kunjan343