【问题标题】:Search for a line that contains some text, replace complete line python搜索包含一些文本的行,替换整行 python
【发布时间】:2011-10-18 19:24:47
【问题描述】:

所以我正在尝试搜索某个字符串,例如: process.control.timeout=30,但 30 可以是任何值。我试过这个:

for line in process:
    line = line.replace("process.control.timeout", "process.control.timeout=900")
    outFile.write(line)

但这会让我回到 process.control.timeout=900=30。我觉得我需要将正则表达式与通配符一起使用?但我对 python 很陌生。

【问题讨论】:

  • 有一种更简单的方法来处理幻数:用名称定义它们一次,然后在需要该数字的任何地方使用该名称。决定换号码?改一行代码。

标签: python regex replace


【解决方案1】:

没有正则表达式:

for line in process:
    if "process.control.timeout" in line:
        # You need to include a newline if you're replacing the whole line
        line = "process.control.timeout=900\n" 
    outFile.write(line)

outFile.writelines("process.control.timeout=900\n" 
                      if "process.control.timeout" in line else line 
                         for line in process)

如果您要匹配的文本位于行首,请使用line.startswith("process.control.timeout") 而不是"process.control.timeout" in line

【讨论】:

    【解决方案2】:

    你是对的,正则表达式是要走的路。

    import re
    pattern = re.compile(r"process\.control\.timeout=\d+")
    for line in process:
        line = pattern.sub("process.control.timeout=900", line)
        outFile.write(line)
    

    【讨论】:

      【解决方案3】:

      这可能是您想要的(匹配== 之后的数字是可选的)。当您在循环中搜索和替换时,单独编译正则表达式将比直接使用re.sub 更有效。

      import re
      
      pattern = re.compile(r'process\.control\.timeout(=\d+)?')
      
      for line in process:
          pattern.sub('process.control.timeout=900', line)
      

      【讨论】:

        猜你喜欢
        • 2016-08-04
        • 1970-01-01
        • 1970-01-01
        • 2016-11-13
        • 2010-09-07
        • 2013-10-18
        • 1970-01-01
        相关资源
        最近更新 更多