Find/Replace but Increment Value

后端 未结 7 698
庸人自扰
庸人自扰 2020-12-31 18:35

I have an .HTML file that has many photos attached to it for displaying a photo gallery. I\'m replacing old photos with new ones, and I\'m thinking there must be a more inte

相关标签:
7条回答
  • 2020-12-31 19:27

    OK, I came up with a Notepad++ solution.
    It does require you to install the Notepad++ plugin PythonScript. It is a TextPad-like incremental replace.

    i.e.
    Search and replace integer values within a string
    replacing incrementally starting with 1 (0 is the default starting value):

    In your case it would be
    Search: ...images/69thStreet[0-9]+.jpg
    Replace: ...images/xyz00\i(1).jpg

    Install the PythonScript plugin.
    Save the code below as a PythonScript and associate a shortcut (i.e. Ctrl+i) to it:
    Then open your html file in Notepad++ and run the script below on your html file.
    When prompted by the search replace dialogue, enter the following 2 lines:
    ...images/69thStreet[0-9]+.jpg
    ...images/xyz00\i(1).jpg

    Now, all instances of
    ...images/69thStreet010.jpg
    ...images/69thStreet011.jpg
    ...images/69thStreet012.jpg

    will become
    ...images/xyz001.jpg
    ...images/xyz002.jpg
    ...images/xyz003.jpg

    Here is the PythonScript code

    from Npp import *
    import re, string
    
    # First we'll start an undo action, then Ctrl-Z will undo the actions of the whole script
    editor.beginUndoAction()
    
    expression     = notepad.prompt("Enter the search string on the first line, followed by Ctrl+Enter, \n" +
                                    "followed by the replace string on second line",
                                    "Incremental Search/Replace" ,
                                    "")
    
    expressionList = re.split(r"[\n\r]+", expression)
    
    if len(expressionList) == 2:
        foundCount = [0]
    
        def incrementalReplace(parmReplaceStr,parmFoundCount):
            varPatternI  = r'\\i\((?P<starting>[0-9]+)\)'
            varPatternIi = r'\\i'
            varPatternISearch = re.search(varPatternI , parmReplaceStr)
    
            if varPatternISearch != None:
                varFoundCount    = int(varPatternISearch.group('starting')) + parmFoundCount[0]
                varReplaceString = re.sub(varPatternI ,str(varFoundCount    ),parmReplaceStr)
            elif re.search(varPatternIi, parmReplaceStr) != None:
                varReplaceString = re.sub(varPatternIi,str(parmFoundCount[0]),parmReplaceStr)
    
            parmFoundCount[0] = parmFoundCount[0] + 1    
            return varReplaceString
    
        # Do a Python regular expression replace
        editor.searchAnchor()
        while editor.searchNext(0x00200000,expressionList[0]) != -1:
            editor.replaceSel(incrementalReplace(expressionList[1],foundCount))
            editor.lineDown() 
            editor.searchAnchor()
    
        # End the undo action, so Ctrl-Z will undo the above two actions
        editor.endUndoAction()
    
    0 讨论(0)
提交回复
热议问题