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 № 1MODIFICARE 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