Feat: add extract_values_from_pattern

This commit is contained in:
Bertrand Benjamin 2025-01-05 10:46:30 +01:00
parent ed8f91d78b
commit b9dade2701
4 changed files with 36 additions and 0 deletions

0
plesna/libs/__init__.py Normal file
View File

View File

@ -0,0 +1,18 @@
import re
class StringToolsError(ValueError):
pass
def extract_values_from_pattern(pattern, string):
regex = re.sub(r"{(.+?)}", r"(?P<_\1>.+)", pattern)
search = re.search(regex, string)
if search:
values = list(search.groups())
keys = re.findall(r"{(.+?)}", pattern)
_dict = dict(zip(keys, values))
return _dict
raise StringToolsError(f"Can't parse '{string}' with the pattern '{pattern}'")

0
tests/libs/__init__.py Normal file
View File

View File

@ -0,0 +1,18 @@
import pytest
from plesna.libs.string_tools import StringToolsError, extract_values_from_pattern
def test_extract_values_from_pattern():
source = "id:truc-bidule-machin"
pattern = "id:{champ1}-{champ2}-machin"
assert extract_values_from_pattern(pattern, source) == {"champ1": "truc", "champ2": "bidule"}
def test_extract_values_from_pattern_no_match():
source = "id:truc-bidule"
pattern = "id:{champ1}-{champ2}-machin"
with pytest.raises(StringToolsError):
extract_values_from_pattern(pattern, source)