import re class Change: """ Instantiates a string representation of a sound change. """ def __init__(self, change): self.parse(change) def __repr__(self): return f"{self.b}>{self.a}/{self.f}_{self.t}" def parse(self, change): if '/' in change: _change, _env = change.split('/') else: _change = change _env = '_' self.b, self.a = _change.split('>') self.f, self.t = _env.split('_') if self.f.startswith("{") and self.f.endswith("}"): self.f = self.f[1:-1].split(',') self.f = f"[{''.join(self.f)}]" if self.t.startswith("{") and self.t.endswith("}"): self.t = self.t[1:-1].split(',') self.t = f"[{''.join(self.t)}]" def sub(self, string): return re.sub(f"(?<={self.f}){self.b}(?={self.t})", f"{self.a}", f"#{string}#").strip('#')