2016-04-07 27 views
0

我不太清楚爲什麼會發生這種情況。我試圖刪除逗號之間的所有內容,但它似乎在做一些奇怪的事情。如果找到某個子字符串,則刪除兩個字符之間的文本(python)

import re 
jsontext = '123,0test123,456,4test567,789' 
for log in re.finditer('test', jsontext): 
    print jsontext 
    logstart = jsontext.rfind(",",0,log.start()) 
    logend = jsontext.find(",",log.start()) 
    jsontext = jsontext[:logstart] + jsontext[logend+1:] 
    print logstart 
    print logend 
    print '\n' 
    print jsontext 
    print '\n---end---\n' 

它是生產

123,0test123,456,4test567,789 
3 
12 


123456,4test567,789 

---end--- 

123456,4test567,789 
15 
-1 


123456,4test567123456,4test567,789 

---end--- 

123456,4test567123456,4test567,789 

離開,但我期待的

123456789 

最終結果爲什麼會出現這種情況,我該怎麼修理它?

回答

0

通過增加固定下面這樣的:

import re 
x = 0 
jsontext = '123,0test123,456,4test567,789' 
while x == 0: 
    log = jsontext.find('test') 
    if log <> -1: 
     logstart = jsontext.rfind(",",0,log) 
       logend = jsontext.find(",",log) 
     jsontext = jsontext[:logstart] + jsontext[logend+10:] 
    else: 
     x = 1 
print jsontext 
0

你可能有固定的,但你的問題基本上是

for log in re.finditer('test',jsontext)

繼續使用原來的jsontext的事實,而不是新jsontext的值。

您可以使用此實現證明了這一點:

import re 
jsontext = '123,0test123,456,4test567,789' 
for log in re.finditer('test', jsontext): 
    log = re.finditer('test',jsontext).next() 
    print jsontext 
    print log.start() 
    logstart = jsontext.rfind(",",0,log.start()) 
    logend = jsontext.find(",",log.start()) 
    jsontext = jsontext[:logstart] + jsontext[logend+1:] 
    print logstart 
    print logend 
    print '\n' 
    print jsontext 
    print '\n---end---\n' 

你需要做的這一個while循環,而不是在一個for循環。

+0

啊,我明白了。我通過調整jsontext變量來嘗試一些事情,但是我無法讓它在re.finditer()中更改變量。我不知道re.finditer()。next()。非常感謝! – rjbogz

+0

這仍然不起作用。我知道我們正在嘗試更新'log'變量,但我無法使其工作。把它放在你的位置產生了一個錯誤:「Traceback(最近一次調用最後一次): 文件」removelogs.py「,第5行,在 log = re.finditer('」EventName「:」Log「,' jsontext).next() StopIteration'。然後我試着把它放在後面,但文件仍然不正確。 – rjbogz

相關問題