import re
text = "1. 1xyz-2xyz - it's OK\n2. 1-2xyz - it's OK\n3. 1xyz - it's OK\n4. 1-2 - there should be no match"
pattern = r"\b([0-9])(xyz)?(?:-([0-9])(xyz)?)?\b(?(2)|(?(4)|(?!)))"
print( [x.group() for x in re.finditer(pattern, text)] )
aW1wb3J0IHJlCnRleHQgPSAiMS4gMXh5ei0yeHl6IC0gaXQncyBPS1xuMi4gMS0yeHl6IC0gaXQncyBPS1xuMy4gMXh5eiAtIGl0J3MgT0tcbjQuIDEtMiAtIHRoZXJlIHNob3VsZCBiZSBubyBtYXRjaCIKcGF0dGVybiA9IHIiXGIoWzAtOV0pKHh5eik/KD86LShbMC05XSkoeHl6KT8pP1xiKD8oMil8KD8oNCl8KD8hKSkpIgpwcmludCggW3guZ3JvdXAoKSBmb3IgeCBpbiByZS5maW5kaXRlcihwYXR0ZXJuLCB0ZXh0KV0gKQ==