test.dat <- c("abcde", "abcXe", "abcdY", "abcXY", "abYcXY", "abcYX")
sub("^([^XY]*)(Y)([^X]*)$|(.*)(X)", "\\1\\41\\3\\5\\2", test.dat)
# => [1] "abcde" "abc1Xe" "abcd1Y" "abc1XY" "abYc1XY" "abcY1X"
stringr::str_replace(test.dat, "^([^XY]*)(Y)([^X]*)$|(.*)(X)", "\\1\\41\\3\\5\\2")
# => [1] "abcde" "abc1Xe" "abcd1Y" "abc1XY" "abYc1XY" "abcY1X"
dGVzdC5kYXQgPC0gYygiYWJjZGUiLCAiYWJjWGUiLCAiYWJjZFkiLCAiYWJjWFkiLCAiYWJZY1hZIiwgImFiY1lYIikKc3ViKCJeKFteWFldKikoWSkoW15YXSopJHwoLiopKFgpIiwgIlxcMVxcNDFcXDNcXDVcXDIiLCB0ZXN0LmRhdCkKIyA9PiBbMV0gImFiY2RlIiAgICJhYmMxWGUiICAiYWJjZDFZIiAgImFiYzFYWSIgICJhYlljMVhZIiAiYWJjWTFYIiAKCnN0cmluZ3I6OnN0cl9yZXBsYWNlKHRlc3QuZGF0LCAiXihbXlhZXSopKFkpKFteWF0qKSR8KC4qKShYKSIsICJcXDFcXDQxXFwzXFw1XFwyIikKIyA9PiBbMV0gImFiY2RlIiAgICJhYmMxWGUiICAiYWJjZDFZIiAgImFiYzFYWSIgICJhYlljMVhZIiAiYWJjWTFYIiA=