0
votes

Comment remplacer plusieurs correspondances dans Regex

J'essaie de remplacer '=' avec '==' dans la chaîne suivante: xxx pré>

Malheureusement, seule la seconde "= 'est remplacée. Pourquoi le premier n'est-il pas remplacé et comment puis-je remplacer le premier aussi? P> xxx pré>

La sortie doit être la suivante: p>

log="[x] = '1' and [y] <> '7' or [z]=='51'".


2 commentaires

Pourquoi pas retour logique.replace ('=', '==') ? Ou re.sub (r '(] \ s *) =', r '\ 1 ==', logique) ?


La sortie doit être log = "[x] == '1' et [y] <> '7' ou [z] == '51'". ou " ] == '1' et [y] <> '7' ou [z] == '51' ". ?


5 Réponses :


0
votes

Peut-être que la fonction Remplacer () est ce que vous recherchez:

log="[x] = '1' and [y] <> '7' or [z]='51'"
log = log.replace("=", "==") 


1 commentaires

Op a dit la ligne entière journal = "[x] = '1' et [y] <> '7' ou [z] = '51'". est une chaîne, pas une variable Journal contenant une chaîne, et que = -> == ne fonctionne pas à cause de cela.



2
votes
def subs_equal_sign(logic):
    return logic.replace(']=', ']==').replace('] =', ']==')

0 commentaires

0
votes

Changer votre fonction sur

>>> subs_equal_sign('''log="[x] = '1' and [y] <> '7' or [z]='51'".''')
'log="[x]==\'1\' and [y] <> \'7\' or [z]==\'51\'".'


0 commentaires

0
votes

Un moyen rapide de faire face à celui-ci est de supprimer le blancheur:

def make_pythonic(str):

    """
        Takes the branching logic string of a field name
        and converts the syntax to that of Python.
    """

    # make list of all checkbox vars in branching_logic string
    #    NOTE: items in list have the same serialization (ordering) 
    #    as in the string.
    checkbox_snoop = re.findall('[a-z0-9_]*\([0-9]*\)', str)

    # if there are entries in checkbox_snoop
    if len(checkbox_snoop) > 0:

        # serially replace "[mycheckboxvar(888)]" syntax of each
        # checkbox var in the logic string with the appropraite
        # "record['mycheckboxvar___888']" syntax
        for item in checkbox_snoop:

            item = re.sub('\)', '', item)
            item = re.sub('\(', '___', item)

            str = re.sub('[a-z0-9_]*\([0-9]*\)', item, str)


    # mask and substitute
    str = re.sub('<=', 'Z11Z', str)
    str = re.sub('>=', 'X11X', str)
    str = re.sub('=', '==', str)
    str = re.sub('Z11Z', '<=', str)
    str = re.sub('X11X', '>=', str)
    str = re.sub('<>', '!=', str)
    str = re.sub('\[', 'record[\'', str)
    str = re.sub('\]', '\']', str)

    # return the string
    return str


0 commentaires

0
votes

Cela pourrait remplacer le caractère donné avec le nouveau caractère à remplacer dans toute la chaîne. log = log.replace ("=", "==") # remplace la sous-chaîne donnée avec une nouvelle chaîne Imprimer (journal) #Display


0 commentaires