diff --git a/instructions/countings_formater.py b/instructions/countings_formater.py index fefcc2c..b854a0d 100644 --- a/instructions/countings_formater.py +++ b/instructions/countings_formater.py @@ -19,6 +19,7 @@ EXPECTED_OUTPUT_TABLE_SCHEMA.remove("Geschlecht") COL_INSTRUCTIONS = { ("Art",): { "command": "FIND_AND_REPLACE", + "reqire_full_match": True, "map": SPICIES }, ("Ort",): { diff --git a/instructions/ring_formater.py b/instructions/ring_formater.py index 6508c6a..4fcbfdb 100644 --- a/instructions/ring_formater.py +++ b/instructions/ring_formater.py @@ -23,11 +23,13 @@ COL_INSTRUCTIONS = { ("Geschlecht",): [ { "command": "FIND_AND_REPLACE", - "map": REPRODUCTION + "map": REPRODUCTION, + "reqire_full_match": True }, { "command": "FIND_AND_REPLACE", - "map": AGE + "map": AGE, + "reqire_full_match": True }, { "command": "REGEX_MOVE_TO_COL", diff --git a/table_handler/commands/find_and_replace.py b/table_handler/commands/find_and_replace.py index b2ec58b..e1cc746 100644 --- a/table_handler/commands/find_and_replace.py +++ b/table_handler/commands/find_and_replace.py @@ -2,13 +2,18 @@ import re from copy import deepcopy class FindAndReplace: - def __init__(self, map: dict[str, list[str]]): + def __init__(self, map: dict[str, list[str]], reqire_full_match: bool = False): self.map = map + self.require_full_match = reqire_full_match def execute_on_cell(self, entry) -> str: res = deepcopy(entry.value) for species, alternatives in self.map.items(): for old_version in alternatives: - res = res.replace(old_version, species) + if self.require_full_match and old_version == res: + # Todo remove random leading/trailing spaces before if + res = species + else: + res = res.replace(old_version, species) return res \ No newline at end of file diff --git a/table_handler/serializer.py b/table_handler/serializer.py index de6eded..e71c5c8 100644 --- a/table_handler/serializer.py +++ b/table_handler/serializer.py @@ -109,7 +109,7 @@ class TableSerializer: res_row = {} match instruct.get("command"): case "FIND_AND_REPLACE": - res = FindAndReplace(instruct["map"]).execute_on_cell(row[source_cell]) + res = FindAndReplace(instruct["map"], instruct.get("reqire_full_match", False)).execute_on_cell(row[source_cell]) case "REGEX_MOVE_TO_COL": res_row = RegexMoveToCol(instruct["match"], instruct["to"], instruct.get("with_input_iteration")) \ .execute_on_row(row, source_cell)