# If you need to add 1 to the end of strings not having X or Y
test.dat <- c("abcde", "abcXe", "abcdY", "abcXY", "abYcXY", "abcYX")
sub("^([^XY]*)$", "\\11", sub("^([^XY]*)(Y)([^X]*)$|(.*)(X)", "\\1\\41\\3\\5\\2", test.dat))
library(stringr)
str_replace(str_replace(test.dat, "^([^XY]*)(Y)([^X]*)$|(.*)(X)", "\\1\\41\\3\\5\\2"), "^([^XY]*)$", "\\11")
IyBJZiB5b3UgbmVlZCB0byBhZGQgMSB0byB0aGUgZW5kIG9mIHN0cmluZ3Mgbm90IGhhdmluZyBYIG9yIFkKdGVzdC5kYXQgPC0gYygiYWJjZGUiLCAiYWJjWGUiLCAiYWJjZFkiLCAiYWJjWFkiLCAiYWJZY1hZIiwgImFiY1lYIikKc3ViKCJeKFteWFldKikkIiwgIlxcMTEiLCBzdWIoIl4oW15YWV0qKShZKShbXlhdKikkfCguKikoWCkiLCAiXFwxXFw0MVxcM1xcNVxcMiIsIHRlc3QuZGF0KSkKCmxpYnJhcnkoc3RyaW5ncikKc3RyX3JlcGxhY2Uoc3RyX3JlcGxhY2UodGVzdC5kYXQsICJeKFteWFldKikoWSkoW15YXSopJHwoLiopKFgpIiwgIlxcMVxcNDFcXDNcXDVcXDIiKSwgIl4oW15YWV0qKSQiLCAiXFwxMSIp