##### SUMMARY
Ansible run fails and I want to retry the failed hosts with the --limit @windows.retry command and it fails with "ERROR! Unexpected Exception, this is probably a bug: string index out of range"

##### ISSUE TYPE
- Bug Report

##### COMPONENT NAME
<!--- Write the short name of the module, plugin, task or feature below, use your best guess if unsure -->
limit

##### ANSIBLE VERSION
<!--- Paste verbatim output from "ansible --version" between quotes -->
```paste below
$ ansible --version
ansible 2.9.0.dev0
  config file = /Users/tanner/projects/ansible.git/playbooks.git/celadonsystems.com/ansible.cfg
  configured module search path = [u'/Users/tanner/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
  ansible python module location = /Users/tanner/projects/ansible.git/ansible/lib/ansible
  executable location = /Users/tanner/projects/ansible.git/ansible/bin/ansible
  python version = 2.7.10 (default, Feb 22 2019, 21:55:15) [GCC 4.2.1 Compatible Apple LLVM 10.0.1 (clang-1001.0.37.14)]
```

##### CONFIGURATION
<!--- Paste verbatim output from "ansible-config dump --only-changed" between quotes -->
```paste below
$ ansible-config dump --only-changed

```

##### OS / ENVIRONMENT
<!--- Provide all relevant information below, e.g. target OS versions, network device firmware, etc. -->
Management host macOS 10.14.6
Managed hosts various releases of Windows

##### STEPS TO REPRODUCE
<!--- Describe exactly how to reproduce the problem, using a minimal test-case -->

<!--- Paste example playbooks or commands between quotes below -->
Run ansible and have a failure so you get the retry file
```yaml
$ ansible-playbook -i testing ../windows.yml  --limit @../windows.retry
```

##### EXPECTED RESULTS
Ansible will run for just the failed hosts in the retry file

##### ACTUAL RESULTS
ERROR! Unexpected Exception, this is probably a bug: string index out of range

<!--- Paste verbatim command output between quotes -->
```paste below
ERROR! Unexpected Exception, this is probably a bug: string index out of range
```

''' takes a list of patterns and reorders them by modifier to apply them consistently '''
    
    pattern_regular = []
    pattern_intersection = []
    pattern_exclude = []
    for p in patterns:
        if p[0] == "!":
            pattern_exclude.append(p)
        elif p[0] == "&":
            pattern_intersection.append(p)
        elif p:
            pattern_regular.append(p)
    
    
    if pattern_regular == []:
        pattern_regular = ['all']
    
    
    return pattern_regular + pattern_intersection + pattern_exclude
def split_host_pattern(pattern):
    """
    Takes a string containing host patterns separated by commas (or a list
    thereof) and returns a list of single patterns (which may not contain
    commas). Whitespace is ignored.
    Also accepts ':' as a separator for backwards compatibility, but it is
    not recommended due to the conflict with IPv6 addresses and host ranges.
    Example: 'a,b[1], c[2:3] , d' -> ['a', 'b[1]', 'c[2:3]', 'd']
    """