【问题标题】:Removing text between two characters if a certain substring is found (python)如果找到某个子字符串,则删除两个字符之间的文本(python)
【发布时间】:2016-04-07 19:52:43
【问题描述】:

我不太清楚为什么会这样。我正在尝试删除逗号之间的所有内容,但它似乎在做一些奇怪的事情。

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

为什么会发生这种情况,我该如何解决?

【问题讨论】:

    标签: python for-loop substring


    【解决方案1】:

    您可能已经修复了它,但您的问题基本上是

    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 循环中。

    【讨论】:

    • 啊,我明白了。我通过调整 jsontext 变量尝试了一些事情,但我无法让它更改 re.finditer() 中的变量。我不知道 re.finditer().next()。非常感谢!
    • 这似乎仍然不起作用。我知道我们正在尝试更新 log 变量,但我无法让它工作。把它放在你放的地方会产生一个错误:Traceback (most recent call last): File "removelogs.py", line 5, in <module> log = re.finditer('"EventName": "Log",',jsontext).next() StopIteration。然后我试着把它放在后面,但文件仍然不正确。
    【解决方案2】:

    通过添加以下内容来解决此问题:

    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
    

    【讨论】:

      猜你喜欢
      • 2017-01-15
      • 1970-01-01
      • 2019-01-24
      • 2012-05-14
      • 1970-01-01
      • 2019-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多