def parseConfStr(confStr):
    """Parse a line of configuration file which is in format of semicolon-separated tuples.

    Args:
        confStr (str): String of tuples, each separated by semicolon, e.g., "(h1,s1);(h2,s1)".

    Returns:
        list: A list of tuples (key, value pairs).

    """
    pairList = []
    specs = confStr.split(';')
    for spec in specs:
        if not spec:
            continue
        spec = spec.strip()
        splits = spec.split(',')
        splits = [ss.strip("()") for ss in splits]
        splits = tuple(splits)
        pairList.append(splits)
    return pairList