2014-04-12 3 views
0

파이썬에서 문자열의 특정 부분을 변경하는 방법을 알아 내려고하고 있습니다. 텍스트 처리와 파이썬에서 매우 초보자입니다. 아래 코드를 생각해 내는데 2 시간이 걸렸지 만 작동하지 않습니다. 이유를 말해 주실 수 있습니까?문자열 찾기 및 바꾸기

나는 다음을 수행해야 б 단어 слово -> слово N [б] 단어

다음

내가 지금까지 무엇을 가지고 :

: 입력 파일에서

# f is the input file, unformatted, anouns is the output file. Right now i get anouns=f, 
# i.e. no changes are made to the lines written into anouns. 

def toNoun(matchobj): 
    if matchobj.group(0) == ' б ': return ' N[б] ' 
    elif matchobj.group(0) == ' д ': return ' N[д] ' 
    elif matchobj.group(0) == ' в ': return ' N[в] ' 
    else: return 'N[й]' 

lines = f.readlines() # list of lines 

for line in lines: 
    if re.match(ur"(?u)^.* ([бдв]|й){1} .*", line): 
    anouns.write(re.sub(' [бдв]|й ',toNoun,line)) 

aбаде й Ewigkeit F

aбат д 알파벳 N

aвст рихо в Österreicher의 m

aга д Wiege

aгар д Gravieren F, N, Schnitzerei

aгархо в 슈니의 m, Graveur의 m, дечиг агархо Holzschnitzer의 m

+0

을'toNoun' 방법 F body가 들여 쓰기가 적절하게 보이지 않습니다. 코드에 올바르게 붙여 넣었습니까? 아니면 어떻게 작성 했습니까? –

+0

질문에 변경되었습니다. 내 코드에 맞습니다. – Ina

+0

당신 reg 열 패턴이 맞는지 확인하고 싶은 경우 파일 몇 줄을 붙여 넣으십시오. –

답변

1
letters = ['б', 'д', 'в'] # add more letters here 
text = "слово б word, слово д word" # you can use your "line" as text 
for letter in letters: 
    letterToReplace = ' '+letter+' ' 
    newString = ' N['+letter+'] ' 
    text = text.replace(letterToReplace , newString) 
print text 
>> слово N[б] word, слово N[д] word 
+0

보편적으로하는 방법, 그래서 그것은 б뿐만 아니라 다른 혼자 서있는 편지에 대해 작동합니까? – Ina

+1

나는 대답을 편집했습니다 – Aleksandar

+0

고마워요! 지금 당장 문제를 해결하기 위해 노력하고 있습니다. 제발 제게 말해 줄 수 있어요, 왜 제가 시도한 것보다이 방법을 선택하겠습니까? – Ina

관련 문제