/ / Regex utilizza la condizione sui risultati della corrispondenza di un'altra espressione regolare - regex, stringa, nidificata

Regex usando la condizione sui risultati della corrispondenza di un'altra espressione regolare - regex, stringa, annidata

Ho una lunga stringa S e una mappa da stringa a stringaM, dove le chiavi in ​​M ​​sono i risultati di una corrispondenza regolare su S. Voglio fare un find-and-replace su S dove, ogni volta che una delle corrispondenze da quella stessa regex è esattamente una delle mie chiavi K in M, I sostituirlo con il suo valore M [K].

Per fare questo penso di aver bisogno di accedereil risultato delle corrispondenze regolari in una regex. Se provo a memorizzare il risultato di una partita e a testare l'uguaglianza al di fuori di una regex, non posso fare la mia sostituzione perché non so più dove si trova la partita. Come posso raggiungere il mio obiettivo?

Esempi:

S = "abcd_a", regex = "[a-z]", M = {a:b}

risultato: "bbcd_b" perché la regex corrisponde alla a "s e li sostituisce con b" s

S = "abcd_a", regex = "[a-z]*", M = {a:b}

risultato: "abcd_b" perché la regex corrisponde a "abcd" (ma non la sostituisce perché non è esattamente "a") e la finale "a" (che sostituirà perché è esattamente "a")

risposte:

1 per risposta № 1

MODIFICARE Grazie per il suggerimento di AlanMoore.Il codice è ora più semplice.

Ho provato ad usare python (2.7x) per risolvere questo semplice esempio, ma può essere raggiunto con qualsiasi altra lingua. Quello che è importante è l'approccio (algoritmo). Spero che aiuti:

import re
from itertools import cycle

S = "abcd_a"
REGEX = "[a-z]"
M = {"a":"b"}

def ReplaceWithDict(pattern):
# split by match group and map the match against map dict
return "".join([M[v] if v and v in M else v for v in re.split(pattern, S)])

print ReplaceWithDict("([a-z])")
print ReplaceWithDict("([a-z]*)")

Produzione:

bbcd_b
abcd_b