Frage

Ok, ich habe diesen Code:

def findNReplaceRegExp(file_name, regexp, replaceString, verbose=True, confirmationNeeded=True):
'''Replaces the oldString with the replaceString in the file given,\
   returns the number of replaces
'''
    # initialize local variables
    cregexp = re.compile(regexp, re.MULTILINE | re.DOTALL)
    somethingReplaced = True
    ocurrences = 0
    isAborted = False

    # open file for read
    file_in = open(file_name, 'r')
    file_in_string = file_in.read()
    file_in.close()

    while somethingReplaced:
        somethingReplaced = False
        # if the regexp is found
        if cregexp.search(file_in_string):
            # make the substitution
            replaced_text = re.sub(regexp, replaceString, file_in_string)
            if verbose == True:
                # calculate the segment of text in which the resolution will be done

                # print the old string and the new string
                print '- ' + file_in_string
                print '+ ' + replaced_text
                if confirmationNeeded:
                    # ask user if this should be done
                    question = raw_input('Accept changes? [Yes (Y), No (n), Abort (a)] ')
                    question = string.lower(question)
                    if question == 'a':
                        isAborted = True
                        print "Aborted"
                        break
                    elif question == 'n':
                        pass
                    else:
                        file_in_string = replaced_text
                        somethingReplaced = True
                        ocurrences = ocurrences + 1
            else:
                file_in_string = replaced_text
                somethingReplaced = True
                ocurrences = ocurrences + 1

    # if some text was replaced, overwrite the original file
    if ocurrences > 0 and not isAborted:
        # open the file for overwritting
        file_out = open(file_name, 'w')
        file_out.write(file_in_string)
        file_out.close()
        if verbose: print "File " + file_name + " written"

Und diese Datei

CMC_SRS T10-24400: DKU Data Supply: SN Time Break-In Area
CMC_SRS T10-24401: DKU Data Supply: SN Transponder Enable Area
CMC_SRS T10-24402: DKU Data Supply: SN Adjust Master Slave Area
CMC_SRS T10-24403: DKU Data Supply: SN ATEC Area
CMC_SRS T10-24404: DKU Data Supply: SN PTEC Area
CMC_SRS T10-25449: DKU Data Supply: SN Self Init Area
CMC_SRS T10-24545: DKU Data Supply: SN Time Area
CMC_SRS T10-4017: RFI display update
CMC_SRS T10-6711: Radio Interface to PLS Equipment
CMC_SRS T10-21077: Safety Requirements: Limit FM Power

Wenn ich die Prozedur mit dieser Datei und diesen Parametern aufrufe: regexp = 24403.*24404 ersetzen = testString

Ich bekomme einen Zufall (es stimmt und fragt, was zu tun ist), aber wenn es Zeit ist, nichts zu ersetzen ... Was ist los?

War es hilfreich?

Lösung

Sie finden mit cregexp, was die Multiline -Option hat, aber dann durch Ersetzen durch regexp, was kann oder nicht.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top