import re rgx_float = r"[-+]?(\d+([.,]\d*)?|[.,]\d+)([eE][-+]?\d+)?" rgx_name = "[a-z,_]*" optics_pattern = re.compile( f"optics *: *(?P{rgx_name})(: *(?P{rgx_float}))?", re.IGNORECASE | re.MULTILINE, ) def get_optics_fields(string_: str): fields = re.finditer(optics_pattern, string_) return fields def clear_description(desc: str) -> str: """Removes text corresponding to an optical property""" new_desc = re.sub(optics_pattern, "", desc) return new_desc