Pull request #33: fix: improve unit recognition

Merge in FRAG/50ohm.de from fix/improve-unit-recognition to main

* commit 'b183ef39f1d200b7ebb299aece1cc66065eb4729':
  fix: parse percentage as unit
  fix: improve unit recognition
This commit is contained in:
Tim Grelka DA2TG
2025-06-24 22:04:12 +02:00
committed by Tim Grelka
2 changed files with 9 additions and 1 deletions
+5 -1
View File
@@ -35,13 +35,15 @@ class Unit(SpanToken):
prefixes = ["p", "n", "μ", "m", "k", "M", "G"]
pattern = re.compile(
r"(?P<value>[0-9,]+) ?(?P<prefix>"
# Check for word boundary at start of value ensures only numeric values are caught.
r"\b(?P<value>[0-9,]+) ?(?P<prefix>"
# Group all prefixes together in a capture group
# Empty string at end of list is required so the group always exists in the resulting match
+ "|".join(prefixes + [""])
+ ")(?P<unit>"
# Group all units together in a capture group.
+ "|".join(units)
# Word boundary check at end of unit to ensure proper handling of units like A, Ah etc.
+ r")(?!\w)"
)
@@ -50,6 +52,8 @@ class Unit(SpanToken):
unit: str
def __init__(self, match: re.Match):
print("pattern", self.pattern)
self.value = match.group("value")
self.prefix = match.group("prefix") or ""
self.unit = match.group("unit")
+4
View File
@@ -15,6 +15,9 @@ def test_basic_units_html():
"0,75 kW": "0,75&#8239;kW",
"33 A": "33&#8239;A",
"1 Ah": "1&#8239;Ah", # Ah can be a tricky case if the RegEx is wrong, as A might match before Ah, thus rendering the output with an "A" unit
"10 A/mm²": "10&#8239;A/mm²",
"DL9MJ": "DL9MJ", # Ensure other strings, like callsings, aren‘t mistaken for units. ;)
"Ein Satz mit 200 V.": "Ein Satz mit 200&#8239;V.", # Support units before sentence ends.
}
for input, output in assertions.items():
@@ -38,6 +41,7 @@ def test_special_units_html():
"""Test special units: Don't put space before ° and %."""
assertions = {
"100%": "100%",
"100 %": "100%",
"42,24°": "42,24°",
}