تعبير Python العادي الذي يطابق كتلة متعددة من النص ولكن لا يستبدلها

StackOverflow https://stackoverflow.com/questions/1803713

سؤال

حسنًا ، لديّ قطعة رمز:

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"

وهذا الملف

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

عندما أتصل بالإجراء مع هذا الملف وهذه المعلمات: regexp = 24403.*24404 استبدال = TestString

أحصل على صدفة (يتطابق مع ما يجب القيام به) ولكن عندما يحين وقت استبدال لا شيء ... ما هو الخطأ ؟؟

هل كانت مفيدة؟

المحلول

You're finding with cregexp, which has the multiline option set, but then replacing with regexp, which may or may not.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top