##### 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 pattern, checks if it has a subscript, and returns the pattern
        without the subscript and a (start,end) tuple representing the given
        subscript (or None if there is no subscript).
        Validates that the subscript is in the right syntax, but doesn't make
        sure the actual indices make sense in context.
        """
        
        if pattern[0] == '~':
            return (pattern, None)
        
        
        
        subscript = None
        m = PATTERN_WITH_SUBSCRIPT.match(pattern)
        if m:
            (pattern, idx, start, sep, end) = m.groups()
            if idx:
                subscript = (int(idx), None)
            else:
                if not end:
                    end = -1
                subscript = (int(start), int(end))
                if sep == '-':
                    display.warning("Use [x:y] inclusive subscripts instead of [x-y] which has been removed")
        return (pattern, subscript)
    def _apply_subscript(self, hosts, subscript):