##### SUMMARY
Running ansible with `--limit a,` or `--limit a,,b` or `--limit ,` leads to (when `-vvv` is added)
```
ERROR! Unexpected Exception, this is probably a bug: string index out of range
the full traceback was:

Traceback (most recent call last):
  File ".../ansible/bin/ansible-playbook", line 123, in <module>
    exit_code = cli.run()
  File ".../ansible/lib/ansible/cli/playbook.py", line 116, in run
    CLI.get_host_list(inventory, context.CLIARGS['subset'])
  File ".../ansible/lib/ansible/cli/__init__.py", line 487, in get_host_list
    inventory.subset(subset)
  File ".../ansible/lib/ansible/inventory/manager.py", line 614, in subset
    if x[0] == "@":
IndexError: string index out of range
ERROR! Unexpected Exception, this is probably a bug: string index out of range
to see the full traceback, use -vvv
```

##### ISSUE TYPE
- Bug Report

##### COMPONENT NAME
lib/ansible/inventory/manager.py

##### ANSIBLE VERSION
```
2.9.0
```
Also happens with `devel`, and potentially older ansible versions.

##### STEPS TO REPRODUCE
Run `ansible-playbook playbook.yml --limit a,` for an existing playbook `playbook.yml` (doesn't matter what it actually does, and also does not matter whether you use `a` or a real host name). Same result with `--limit a,,b` or similar expressions where `.split(',')` will lead to an empty string in the resulting list.

##### EXPECTED RESULTS
Ansible complaining about syntax, or simply ignoring the trailing comma / empty parts of the `.split(',')`.

##### ACTUAL RESULTS
```
ERROR! Unexpected Exception, this is probably a bug: string index out of range
to see the full traceback, use -vvv
```

"""
        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):