2010-06-20 7 views
2

에서 내가 좋아하는 일을하고 싶습니다. 문제는 그러한 메소드를 수행 할 때 새 문자열이 새 문자열에서 제거된다는 것입니다. 그러면 어떻게 newline을 제거하지 않고 이것을 할 수 있습니까?재구성 문자열은 파이썬

+0

제거 할 줄 바꿈은 무엇입니까? 약간의 질문을 확장/명확하게 할 수 있습니까? – mikej

+0

문자열을 단어로 분할하고 몇 가지 수정을 한 후 다시 넣으려고합니다. 원래 줄 바꿈과 공백을 그대로 유지하면서 모두 – yydl

+0

b = "".join (temp)을 의미합니까? – tlayton

답변

7

당신은 join(temp)하지 join(a) 의미한다. 단지 re.split 있습니다에서 당신이 얻을 것 조각을

>>> import re 
>>> f='tanto va\nla gatta al lardo' 
>>> re.split(r'(\s+)', f) 
['tanto', ' ', 'va', '\n', 'la', ' ', 'gatta', ' ', 'al', ' ', 'lardo'] 

:

당신이 re.split 기능을 필요로 (또는 RE 객체의 split 방법) 캡처 그룹으로 분할 아직 정확한 "스플리터"를 유지하려면 인덱스 0, 2, 4, ...에서홀수 인덱스에는 "separator"가 있습니다. 즉, 원래 문자열과 동일한 공백을 얻기 위해 끝에 목록을 다시 결합하는 데 사용하는 공백의 정확한 시퀀스입니다 (''.join 포함).

당신은 심지어 간격 항목에 직접 작업 할 수 있습니다, 또는 당신이 먼저를 추출 할 수 있습니다 :

>>> y[:] = [z+z for z in y] 
>>> y 
['tantotanto', 'vava', 'lala', 'gattagatta', 'alal', 'lardolardo'] 

후 다시 삽입하고 조인 예를 들면 다음 y는 것 등을 변경

>>> x = re.split(r'(\s+)', f) 
>>> y = x[::2] 
>>> y 
['tanto', 'va', 'la', 'gatta', 'al', 'lardo'] 

을 최대 :

>>> x[::2] = y 
>>> ''.join(x) 
'tantotanto vava\nlala gattagatta alal lardolardo' 

\n은 정확히 p 원하는대로 원래 위치와 동일한 위치에 놓습니다.

0

나는 당신의 질문을 정말로 이해하지 못합니다. 당신이하고 싶은 것을 보여줄 수 있습니까?

어쨌든

, 어쩌면이 도움이 될 수 있습니다 모든

b = '\n'.join(a) 
+0

참. 그러나 공백이 보존되지 않는다. – yydl

0

첫째, 난 당신이

b = " ".join(a) 

말을 할 때 분할을 호출 할 때 당신은 실제로 (

b = " ".join(temp) 

을 의미한다고 가정) 구분 기호를 지정하지 않으면 함수는 길이의 공백을 구분 기호로 해석합니다. 공백에는 개행 문자가 포함되어 있으므로 문자열을 분리 할 때 공백 문자가 사라집니다. 구분 기호 (예 : 간단한 공백 문자)를 split()에 명시 적으로 전달하십시오. 행에 공백이 여러 개있는 경우이 방법으로 split을 사용하면 모두 제거되고 반환되는 목록에 일련의 빈 문자열이 포함됩니다.

원래 간격을 복원하려면 split()에서 분리 기호로 사용한 것과 동일한 문자열에서 join()을 호출하고 중간 문자열 목록에서 요소를 제거하지 않도록하십시오.

1

정규식을 사용하여 문자열을 추출해야합니다. 결과로 나오는 match 객체는 다양한 하위 표현식과 일치하는 부분의 문자 범위를 줄 수 있습니다.

공백으로 구분 된 임의의 개수의 섹션이있을 수 있으므로 문자열 내 다른 시작점에서 여러 번 해당 문자열을 일치시켜야합니다.

이 답변을 사용하는 것이 혼란 스럽다면 적절한 참조를 찾아 샘플 코드를 입력하면됩니다. 나는 정말로 모든 도서관이 암기되어있는 것은 아니며 단지 그들이하는 일을하고있다. :-)

1

분할하려는 대상에 따라 다릅니다. 당신은 단지 delimitador 등의 공간을 원하는 경우 '\ n'을 기본 분리 사용을 위해

','delimitador, 당신은

a.split(" ") 

를 사용할 수 있습니다. 나는 세 번째 줄에 가정

http://docs.python.org/library/stdtypes.html#str.split

+0

인수에 split을 사용하면 split()과 다른 점은 입력에 공백 연속 시퀀스가있는 경우 빈 문자열도 포함된다는 점이다. 예 : .split ("")'->'[ 'two', '', 'spaces']'. * 편집 * : 젠장, SO 주석 형식은 "두 칸"에 여분의 칸을 표시하지 않습니다. –