The question is about using regexp, but assuming this is not a class assignment etc the solution doesn't require a regexp. A short solution that also handles multiple values per key:
Map<String, List<String>> map = Files.lines(Paths.get("data.txt")).map(s -> s.replace("(", "").replace(")", ""))
.collect(groupingBy(s -> (s.split(","))[0], mapping(s -> (s.split(",", -1))[1].trim(), toList())));
System.out.println(map);
Will print the resulting map as:
{xyz=[AB], pqrst=[1E], abcd=[01]}
Explanation:
Files.lines(...) //reads all lines from file as a java 8 stream
map(s-> s.replace) // removes all parenthesis from each line
collect(groupingBy(s -> (s.split(","))[0] //collect all elements from the stream and group them by they first part before the ","
mapping(mapping(s -> (s.split(",", -1))[1].trim(), toList()) //and the part after the "," should be trimmed, -1 makes it able to handle empty strings, collect those into a list as the value of the previously grouping
Alternate replace, instead of two simple replace to remove ( and ) you can use
s.replaceAll("\\(|\\)", "")
Not sure which is most readable.